用类似键组合两个词典

时间:2013-12-04 22:32:40

标签: python python-2.7 dictionary

假设我有两个这样的词典:

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}}

对于较大的词典,最好的方法是什么?

3 个答案:

答案 0 :(得分:6)

使用dictionary view objects

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}}