假设我有两个这样的词典:
first_dict = {'1': 3, '2': 4, '3':8, '9': 20}
second_dict = {'3': 40, '9': 28, '100': 3}
现在我的想法是:我希望得到所有相同的密钥,并将这些密钥的条目放入每个值的字典中。
例如:
combined_dict = {'3': {'first_dict': 8, 'second_dict': 40}, '9': {'first_dict': 20, 'second_dict':28}}
对于较大的词典,最好的方法是什么?
答案 0 :(得分:6)
combined_dict = {key: {'first_dict': first_dict[key], 'second_dict': second_dict[key]}
for key in first_dict.viewkeys() & second_dict}
表达式first_dict.viewkeys() & second_dict
使用集合交集来列出只是两个字典共有的键。 dict.viewkeys()
为我们提供了一个字典的视图,该字典就像一个集合而不创建一个全新的集合对象。
这使得上面的表达式比创建两个集合并将它们相交更有效,特别是在处理大型字典时。
答案 1 :(得分:4)
common_keys = set(first_dict.keys()) & set(second_dict.keys())
combined_dict = { key: {'first_dict': first_dict[key],
'second_dict': second_dict[key] } for key in common_keys
}
答案 2 :(得分:1)
这适用于任意数量的词组:
def combine(**kwargs):
return { k: { d: kwargs[d][k] for d in kwargs
} for k in set.intersection(*map(set, kwargs.values()))
}
例如:
print combine(
one={'1': 3, '2': 4, '3':8, '9': 20},
two={'3': 40, '9': 28, '100': 3},
three={'3':14, '9':42})
# {'9': {'one': 20, 'three': 42, 'two': 28}, '3': {'one': 8, 'three': 14, 'two': 40}}