首页 > 解决方案 > 如何根据列表的长度将包含列表的字典分成相等的部分

问题描述

假设我有一个包含多个不同大小列表的字典,我将如何根据列表的长度将字典拆分为 4 个长度相等的字典。有没有一种简单的方法可以做到这一点?

dict = {"A":[1,2,3,4,5], "B":[1,2,3], "C":[1,2,3,4,5,6,7,8]}

我如何将其拆分为 4 个相同长度的字典,以便获得以下结果:

dict1 = {"A":[1,2,3,4]}
dict2 = {"A":[5], "B":[1,2,3]}
dict3 = {"C":[1,2,3,4]}
dict4 = {"C":[5,6,7,8]}

编辑:如果不能平均分割,那么其中一个字典最终会比其他字典稍长。

标签: pythonpython-3.xdictionarysplit

解决方案


这是一种方法,使用生成器生成连续的键值对:

data = {"A":[1,2,3,4,5], "B":[1,2,3], "C":[1,2,3,4,5,6,7,8]}


def key_value_gen(data):
    # will yield ('A', 1), ('A', 2), .... ('C', 8)
    for key, values in data.items():
        for value in values:
            yield key, value

out = []
size = 4

for index, (key, value) in enumerate(key_value_gen(data)):
    # if the index is a multiple of size, we add a new dict
    if index % size == 0:
        out.append({})
    out[-1].setdefault(key, []).append(value)

print(out)
# [{'A': [1, 2, 3, 4]}, {'A': [5], 'B': [1, 2, 3]}, {'C': [1, 2, 3, 4]}, {'C': [5, 6, 7, 8]}]

推荐阅读