玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python合并字典操作时同key的value应该如何相加

x = { 'apple': 1, 'banana': 2 }
y = { 'banana': 10, 'pear': 11 }

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

{ 'apple': 1, 'banana': 12, 'pear': 11 }

最后的结果中 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}
>>> 

利用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

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

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19410.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月24日 - 17时34分59秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules