我怎样才能把字典和同一把钥匙结合起来呢?

2024-05-16 03:39:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的字典列表:

dicts = [
    {'key_a': valuex1,
     'key_b': valuex2,
     'key_c': valuex3},

    {'key_a': valuey1,
     'key_b': valuey2,
     'key_c': valuey3},

    {'key_a': valuez1,
     'key_b': valuez2,
     'key_c': valuez3}
]

我想把这些东西做成一本大字典,就像这样:

big_dict = {
    'key_a': [valuex1, valuey1, valuez1],
    'key_b': [valuex2, valuey2, valuez2],
    'key_c': [valuex3, valuey3, valuez3]
}

有没有什么优雅的“zip”的方式让我这么做?

所有的钥匙总是一样的。


Tags: key列表字典bigdicts大字典valuex1valuex2
3条回答

如果所有的听写都有一组相同的键,这将起作用:

dict((k, [d[k] for d in dictList]) for k in dictList[0])

如果它们可能有不同的键,则首先需要通过对不同dict的键执行set union来构建一组键:

allKeys = reduce(operator.or_, (set(d.keys()) for d in dictList), set())

那么你需要在一些口述中防止丢失钥匙:

dict((k, [d[k] for d in [a, b] if k in d]) for k in allKeys)
big_dict = {}
for k in dicts[0]:
    big_dict[k] = [d[k] for d in dicts]

或者,用dict comprehension

{k: [d[k] for d in dicts] for k in dicts[0]}

您可以使用^{}。这个解决方案的好处是它不需要在字典之间保持键的一致性,并且它仍然保持最小的O(n)时间复杂性。

from collections import defaultdict

dict_list = [{'key_a': 'valuex1', 'key_b': 'valuex2', 'key_c': 'valuex3'},
             {'key_a': 'valuey1', 'key_b': 'valuey2', 'key_c': 'valuey3'},
             {'key_a': 'valuez1', 'key_b': 'valuez2', 'key_c': 'valuez3'}]            

d = defaultdict(list)
for myd in dict_list:
    for k, v in myd.items():
        d[k].append(v)

结果:

print(d)

defaultdict(list,
            {'key_a': ['valuex1', 'valuey1', 'valuez1'],
             'key_b': ['valuex2', 'valuey2', 'valuez2'],
             'key_c': ['valuex3', 'valuey3', 'valuez3']})

相关问题 更多 >