我有两个充满字典的大型列表。如果来自dict2 == dict1的值,我需要组合条目,并将新组合的匹配放在其他地方。我无法解释它。
列表一包含:
{'keyword':value, 'keyword2':value2}
列表二:
{'keyword2':value2, 'keyword3':value3}
如果两个列表共享相同的'keyword2'值,我想要一个包含关键字词典的新列表,包括keyword1,keyword2和keyword3。最好的方法是什么?当我尝试时,我只想出了大量的嵌套for循环。感谢
答案 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)
循环遍历一个字典,将各个元素与另一个字典进行比较。像这样,dict1
和dict2
是原件,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]
。)