Python合并2个字典而不覆盖

Python合并2个字典而不覆盖,python,dictionary,Python,Dictionary,如果a和b是两个词典: 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']}

如果a和b是两个词典:

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

覆盖意味着什么?它将覆盖同名的密钥。我不想overwrite@ManabChetia--没问题。祝你好运。我得到了这个结果
defaultdict(,{'Australia':['h','t','t','p','s','s','t','t','t','t','t','s','s','t','r','a','l','I','a','c','o','m','COM':['http://www.uk.com', 'http://www.michaeljackson.com', 'http://www.Australia.com', 'http://www.rafaelnadal.com', 'http://www.rogerfederer.com“],“英国”:['h','t','t','p',':','/','/','w','w','w','w','u','k','c','o','m']}
@ManabChetia——是的,这正是我所期望的——我可以加上一张支票来解决这个问题……如果你能告诉我如何得到准确的答案,那将非常有帮助output@ManabChetia--请参阅我更新的
defaultdict
示例。它应该能满足您的需求。