2010-05-20 54 views
-1

我有两个大词汇表填充字典。如果dict2 == dict1中的一个值,并且将新组合的匹配放在其他地方,我需要合并这些条目。我无法解释它。合并条目,过滤Python字典

列出一个包含:

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

列出两种:

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

我想用字典,包括关键词1,关键词和KEYWORD3一个新的列表,如果两个列表共享相同的“关键字2”值。什么是最好的方法来做到这一点?当我尝试时,我只想出了大量的嵌套for循环。谢谢

+1

我想你使用语言翻译年龄错误。像'{'k1':'v1','k2':'v2'}'是一个“字典”,而不是一个列表;像'k1'这样的个人成员:'v1'是一个“元素”或“映射”。也许是迂腐,但它会让你更难理解。 – Etaoin 2010-05-20 07:47:05

+0

如果列表对同一个密钥有不同的值,会发生什么?哪一个胜利?或者应该删除条目或引发异常? – 2010-05-20 08:54:02

回答

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。如果你不想为包括值,与del dict3[k]更换pass。)

2

如果你不关心“冲突”,即相同的密钥映射到不同的值有两种类型的字典,您可以使用类型的字典的方法update

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

假设你的类型的字典存储在名为dict_list大名单:

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

OP写道只有共享值应该在新列表中,所以他确实在意冲突 - 他只是没有说明程序在这种情况下应该如何表现。 – 2010-05-20 08:55:25