2012-07-16 63 views
0

I的值有2个字典相同的按键:的Python:比较的2个字典密钥和更新之一

d={123:'bla', 456: blabla} 
e={123:'bla', 456:''} 

字典e的一些空值,并且如果是这种情况和ID相同我想用d中的值替换空值。

我期待这样的事情:

if d.keys()==e.keys(): 
    e.values==d.values() 
print e 

但是,我无法找到比较单一键和更新值Python文档中任何事情。

有人可以帮忙或指点我吗?

谢谢:)

+0

为什么不从集合中使用defaultdict? – 2012-07-16 09:28:26

回答

0

你可以做直更新,如果你不介意与

e.update(d) 

覆盖不同的值,或者如果你想确保你只覆盖包含空值,那么那些你将需要遍历你的字典找到他们,并更新选择性

# Python 2.x 
for key, value in e.iteritems(): 
    if value == '': 
     e[key] = d.get(key) 

# Python 3.x 
for key, value in e.items(): 
    if value == '': 
     e[key] = d.get(key) 
+0

谢谢。由于我的文件非常非常大,我可能更喜欢第二个选项(我猜它占用的内存更少!)。但是,我确实得到了错误AttributeError:'dict'对象没有属性'iteritems'。 – Kaly 2012-07-16 09:24:43

+0

嗯,'AttributeError'是因为在Python3.x中它改为只是'.items()'。将更新我的答案。 – 2012-07-16 09:29:28

+0

非常感谢:) – Kaly 2012-07-16 09:47:37

0

您也可以使用字典理解:

f = {k:(e[k] or d[k]) for k in e.keys()} 

or如果第一个项目为空,则评估为第二项目。当然,你必须确保两个使用相同的密钥。