簡體   English   中英

Python Merge 2 Dictionaries沒有覆蓋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM