Разделить словарь на несколько словарей в Python

Чтобы разделить словарь на несколько словарей в Python, вы можете использовать различные методы. Вот несколько подходов:

Метод 1: использование итерации и срезов

def split_dict(dictionary, chunk_size):
    keys = list(dictionary.keys())
    values = list(dictionary.values())
    num_chunks = len(dictionary) // chunk_size
    if len(dictionary) % chunk_size != 0:
        num_chunks += 1
    result = []
    for i in range(num_chunks):
        start = i * chunk_size
        end = start + chunk_size
        chunk_keys = keys[start:end]
        chunk_values = values[start:end]
        chunk_dict = dict(zip(chunk_keys, chunk_values))
        result.append(chunk_dict)
    return result
# Example usage
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
chunk_size = 2
result = split_dict(my_dict, chunk_size)
print(result)

Выход:

[{'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 5, 'f': 6}]

Метод 2: использование понимания списка

def split_dict(dictionary, chunk_size):
    items = list(dictionary.items())
    num_chunks = len(dictionary) // chunk_size
    if len(dictionary) % chunk_size != 0:
        num_chunks += 1
    result = [{k: v for k, v in items[i * chunk_size:(i + 1) * chunk_size]} for i in range(num_chunks)]
    return result
# Example usage
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
chunk_size = 2
result = split_dict(my_dict, chunk_size)
print(result)

Выход:

[{'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 5, 'f': 6}]

Метод 3: использование модуля itertools

import itertools
def split_dict(dictionary, chunk_size):
    items = list(dictionary.items())
    result = [dict(chunk) for chunk in itertools.zip_longest(*[iter(items)] * chunk_size, fillvalue={})]
    return result
# Example usage
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
chunk_size = 2
result = split_dict(my_dict, chunk_size)
print(result)

Выход:

[{'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 5, 'f': 6}]

Обратите внимание, что предоставленные методы разделяют словарь на основе указанного размера фрагмента.