在Python中合并2个词典

时间:2012-11-16 23:07:27

标签: python dictionary mutable

我有2本词典。

dict1={('SAN RAMON', 'CA'): 1, ('UPLAND', 'CA'): 4, ('POUGHKEESIE', 'NY'): 3, ('CATTANOOGA', 'TN'): 1}

dict2={('UPLAND', 'CA'): 5223, ('PORT WASHING', 'WI'): 11174, ('PORT CLINTON', 'OH'): 6135, ('GRAIN VALLEY', 'MO'): 10352, ('GRAND JUNCTI', 'CO'): 49688, ('FAIRFIELD', 'IL'): 5165}

这些只是样本,实际上每个dict都有数百个条目。我正在尝试合并两个字典并创建包含{dict1.values():dict2.values()}的字典3,但前提是该字母出现在两个字典中。因此,dict3中的一个条目看起来像

{4:5223}   # for 'UPLAND', 'CA' since it appears in both dict1 and dict2

这只是我写的更大功能中的一小步。我打算尝试这样的事情:

for item in dict1.keys():
        if item not in dict2.keys():
            del item
        return dict[(dict1.keys())=(dict2.keys())]

我无法弄清楚如何确保来自dict1的投诉数量与dict2中所引用的城市相匹配。

3 个答案:

答案 0 :(得分:5)

以下是我认为你想要的(demo)

dict3 = dict((dict1[key], dict2[key]) for key in dict1 if key in dict2)

扩展了一点,看起来像这样:

dict3 = {}
for key in dict1:
    if key in dict2:
        dict3[dict1[key]] = dict2[key]

答案 1 :(得分:0)

常用密钥是:

set(dict1.keys()) & set(dict2.keys())
  

创建包含{dict1.values():dict2.values()}

的字典3

这没有意义,词典是键值对...你真正想要的是什么?提示:

dict3 = {}
for k in set(dict1.keys()) & set(dict2.keys()):
    dict3[dict1[k]]=dict2[k]

{4: 5223}

答案 2 :(得分:0)

直截了当的方法是检查一个中的每个键是否为另一个中的成员:

result = {}
for key in dict1:
    if key in dict2:
        result[dict1[key]] = dict2[key]

您也可以尝试将它们转换为setfrozenset并将其转换为交叉点,但我不清楚这是否会更快:

keys_in_both = frozenset(dict1) & frozenset(dict2)
result = dict((dict1[key], dict2[key]) for key in keys_in_both)