如果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中执行此操作?
答案 0 :(得分:3)
使用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)
(但这正是我在my earlier answer中所说的)
如果您的输入词典看起来像
,现在可以使用{'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