为了账号安全,请及时绑定邮箱和手机立即绑定

是否有任何节奏曲的方法来组合两个切分(增加出现在两个切分中的键的值)?

是否有任何节奏曲的方法来组合两个切分(增加出现在两个切分中的键的值)?

慕村9548890 2019-06-19 10:37:41
是否有任何节奏曲的方法来组合两个切分(增加出现在两个切分中的键的值)?例如,我有两个字典:Dict A: {'a': 1, 'b': 2, 'c': 3}Dict B: {'b': 3, 'c': 4, 'd': 5}我需要一种“合二为一”的节奏曲方式,结果是:{'a': 1, 'b': 5, 'c': 7, 'd': 5}也就是说:如果一个键出现在两个数据中,那么添加它们的值,如果它只出现在一个DECT中,则保留它的值。
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

使用collections.Counter:

>>> from collections import Counter>>> A = Counter({'a':1, 'b':2, 'c':3})>>> B = Counter({'b':3, 'c':4, 'd':5})
>>> A + BCounter({'c': 7, 'b': 5, 'd': 5, 'a': 1})

计数器基本上是dict,所以您仍然可以对它们执行通常使用该类型的所有其他操作,例如对它们的键和值进行迭代。


查看完整回答
反对 回复 2019-06-19
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

一种更通用的解决方案,也适用于非数字值:

a = {'a': 'foo', 'b':'bar', 'c': 'baz'}b = {'a': 'spam', 'c':'ham', 'x': 'blah'}r = dict(a.items() + b.items() +
    [(k, a[k] + b[k]) for k in set(b) & set(a)])

或者更普通的:

def combine_dicts(a, b, op=operator.add):
    return dict(a.items() + b.items() +
        [(k, op(a[k], b[k])) for k in set(b) & set(a)])

例如:

>>> a = {'a': 2, 'b':3, 'c':4}>>> b = {'a': 5, 'c':6, 'x':7}>>> import operator>>> print combine_dicts(a, b, operator.mul)
{'a': 10, 'x': 7, 'c': 24, 'b': 3}


查看完整回答
反对 回复 2019-06-19
?
慕少森

TA贡献2019条经验 获得超9个赞

>>> A = {'a':1, 'b':2, 'c':3}>>> B = {'b':3, 'c':4, 'd':5}>>> c = {x: A.get(x, 0) + B.get(x, 0) for x in set(A).union(B)}
>>> print(c){'a': 1, 'c': 7, 'b': 5, 'd': 5}


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 399 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信