python 合并字典,相同 key 的 value 如何相加?
PHP中文网
PHP中文网 2017-04-17 13:28:41
[Python讨论组]
x = { 'apple': 1, 'banana': 2 }
y = { 'banana': 10, 'pear': 11 }

需要把两个字典合并,最后输出结果是:

{ 'apple': 1, 'banana': 12, 'pear': 11 }
PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
怪我咯

利用collections.Counter可轻松办到

>>> x = { 'apple': 1, 'banana': 2 }
>>> y = { 'banana': 10, 'pear': 11 }
>>> from collections import Counter
>>> X,Y = Counter(x), Counter(y)
>>> z = dict(X+Y)
>>> z

本人的写法:

>>>from collections import Counter
>>>dict(Counter(x)+Counter(y))
高洛峰

上面两位的答案都是对的,我做了一下性能对比,你可以看下。

from collections import Counter
x = { 'apple': 1, 'banana': 2 }
y = { 'banana': 10, 'pear': 11 }
def f():
    i = 0
    while 1:
        if i == 10000:
            break
        for k, v in y.items():
            if k in x.keys():
                x[k] += v
            else:
                x[k] = v
        i += 1


def g():
    i = 0
    while 1:
        if i == 10000:
            break
        X,Y = Counter(x), Counter(y)
        z = dict(X+Y)
        i += 1

if __name__ == "__main__":
    import timeit
    tf = timeit.timeit(f, "from __main__ import f", number=10)
    tg = timeit.timeit(g, "from __main__ import g", number=10)
    print "f: %s\ng: %s" % (tf, tg)

输出:

f: 0.138742800623
g: 1.37559758279

我的建议是,简单的功能自己手写就好。

PHPz

最后的结果中 banana12 而不是 2

>>> x = { 'apple': 1, 'banana': 2 }
>>> y = { 'banana': 10, 'pear': 11 }
>>> for k, v in y.items():
...     if k in x.keys():
...         x[k] += v
...     else:
...         x[k] = v
... 
>>> x
{'pear': 11, 'apple': 1, 'banana': 12}
>>> 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号