结合条目,过滤Python词典

时间:2010-05-20 07:44:25

标签: python sorting list dictionary

我有两个充满字典的大型列表。如果来自dict2 == dict1的值,我需要组合条目,并将新组合的匹配放在其他地方。我无法解释它。

列表一包含:

{'keyword':value, 'keyword2':value2}

列表二:

{'keyword2':value2, 'keyword3':value3}

如果两个列表共享相同的'keyword2'值,我想要一个包含关键字词典的新列表,包括keyword1,keyword2和keyword3。最好的方法是什么?当我尝试时,我只想出了大量的嵌套for循环。感谢

2 个答案:

答案 0 :(得分:2)

如果你不关心“冲突”,即同一个键被映射到两个dicts中的不同值,你可以使用update dicts方法:

>>> d1 = {'keyword': 1, 'keyword2': 2}
>>> d2 = {'keyword2': 2, 'keyword3': 3}
>>> d = {}
>>> d.update(d1)
>>> d
{'keyword2': 2, 'keyword': 1}
>>> d.update(d2)
>>> d
{'keyword3': 7, 'keyword2': 2, 'keyword': 1}

假设您的dicts存储在名为dict_list的大型列表中:

total = {}
for d in dict_list:
    total.update(d)

答案 1 :(得分:0)

循环遍历一个字典,将各个元素与另一个字典进行比较。像这样,dict1dict2是原件,dict3就是结果:

dict3 = dict1
for k in dict2:
    if k in dict1:
        # The key is in both dictionaries; we've already added dict1's version
        if dict1[k] != dict2[k]:
            pass # The dictionaries have different values; handle this as you like
    else
        # The key is only in dict2; add it to dict3
        dict3[k] = dict2[k]

如果两个词典对某些键具有不同的值,则您不清楚自己想要的行为;用你想做的任何东西取代“通行证”。 (如上所述,它会保留dict1的值。如果您不想包含任何值,请将pass替换为del dict3[k]。)