2

有没有办法在不盲目覆盖同一键值的情况下更新()字典?例如,如果我找到它,我希望在我的策略中为同一个键添加值,如果找不到键则连接。

d1 = {'eggs':3, 'ham':2, 'toast':1}
d2 = {'eggs':2,'ham':1}

dresult = d1.myUpdate(d2)

print dresult 
{'eggs':5,'ham':3,'toast':1}
4

2 回答 2

7

您可以为此使用计数器(在 python 2.7 中引入):

from collections import Counter
d1 = {'eggs':3, 'ham':2, 'toast':1}
d2 = {'eggs':2,'ham':1}
dresult = Counter(d1) + Counter(d2)  #Counter({'eggs': 5, 'ham': 3, 'toast': 1})

如果你需要一个适用于 python2.5+ 的版本,adefaultdict也可以工作(虽然不是很好):

from collections import defaultdict    
d1 = {'eggs':3, 'ham':2, 'toast':1}
d2 = {'eggs':2,'ham':1}
d = defaultdict(int)
dresult.update(d1)
for k,v in d2.items():
   dresult[k] += v

尽管您可以实现等效的python2。?结果使用字典的setdefault方法...

于 2012-08-31T14:36:12.417 回答
6

使用计数器:

from collections import Counter
d1 = Counter({'eggs':3, 'ham':2, 'toast':1})
d2 = Counter({'eggs':2,'ham':1})
print d1 + d2
于 2012-08-31T14:36:56.473 回答