[英]Python Merge 2 Dictionaries without overwriting
如果a和b是2個詞典:
a = {'UK':'http://www.uk.com', 'COM':['http://www.uk.com','http://www.michaeljackson.com']}
bb = {'Australia': 'http://www.australia.com', 'COM':['http://www.Australia.com', 'http://www.rafaelnadal.com','http://www.rogerfederer.com']}
我想合並他們得到
{'Australia': ['http://www.australia.com'], 'COM': ['http://www.uk.com', 'http://www.michaeljackson.com', 'http://www.Australia.com', 'http://www.rafaelnadal.com', 'http://www.rogerfederer.com'], 'UK': ['http://www.uk.com']}
我想結合它們,即
如何在沒有過度誇大和替換任何值的情況下在Python中執行此操作?
使用defaultdict:
from collections import defaultdict
d = defaultdict(list)
for dd in (a,bb):
for k,v in dd.items():
#Added this check to make extending work for cases where
#the value is a string.
v = (v,) if isinstance(v,basestring) else v #basestring is just str in py3k.
d[k].extend(v)
(但這幾乎就是我在之前的回答中告訴你的)
現在,如果您的輸入詞典看起來像這樣
{'Australia':['http://www.australia.com']}
或者喜歡:
{'Australia':'http://www.australia.com'}
但是,我建議不要采用后一種形式。 一般來說,我認為保持字典的所有鍵/值看起來都是一個好主意(至少如果你想要處理所有項目與此問題相同)。 這意味着如果一個值是一個列表,那么所有這些值都是一個列表是個好主意。
如果你真的堅持這樣做:
d = {}
for dd in (a,b):
for k,v in dd.items():
if(not isinstance(v,list)):
v = [v]
try:
d[k].extend(v)
except KeyError: #no key, no problem, just add it to the dict.
d[k] = v
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.