3 回答
TA贡献1784条经验 获得超2个赞
您可以直接迭代字典-无需使用range。该setdefault字典的方法查找的关键,如果找到返回值。如果找不到,它将返回默认值,并将该默认值分配给密钥。
super_dict = {}
for d in dicts:
for k, v in d.iteritems(): # d.items() in Python 3+
super_dict.setdefault(k, []).append(v)
另外,您可以考虑使用defaultdict。这只是setdefault通过调用一个函数来自动执行,该函数在找不到键时返回默认值。
import collections
super_dict = collections.defaultdict(list)
for d in dicts:
for k, v in d.iteritems(): # d.items() in Python 3+
super_dict[k].append(v)
而且,正如Sven Marnach的观察一样,您似乎不希望列表中的值重复。在这种情况下,set可以为您提供所需的东西:
import collections
super_dict = collections.defaultdict(set)
for d in dicts:
for k, v in d.iteritems(): # d.items() in Python 3+
super_dict[k].add(v)
TA贡献1893条经验 获得超10个赞
from collections import defaultdict
dicts = [{'a':1, 'b':2, 'c':3},
{'a':1, 'd':2, 'c':'foo'},
{'e':57, 'c':3} ]
super_dict = defaultdict(set) # uses set to avoid duplicates
for d in dicts:
for k, v in d.items(): # use d.iteritems() in python 2
super_dict[k].add(v)
TA贡献1828条经验 获得超3个赞
合并所有字典的键,并为每个键组合值列表:
super_dict = {}
for k in set(k for d in dicts for k in d):
super_dict[k] = [d[k] for d in dicts if k in d]
该表达式set(k for d in dicts for k in d)构建所有词典的所有唯一键的集合。对于这些独特的按键,我们使用列表理解[d[k] for d in dicts if k in d],从这个键中的所有类型的字典构建值的列表。
由于您似乎只是每个键的唯一值之一,因此您可能想使用集合:
super_dict = {}
for k in set(k for d in dicts for k in d):
super_dict[k] = set(d[k] for d in dicts if k in d)
添加回答
举报