2012-07-16 76 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如果第一個項目爲空,則評估爲第二項目。當然,你必須確保兩個使用相同的密鑰。