添加或合并python词典而不会丢失

4 python merge dictionary add count

我正在尝试计算在两台服务器上的日志文件中找到的IP地址,然后将字典统计数据合并在一起,而不会丢失元素或计数.我在另一个堆栈溢出问题中找到了部分解决方案但是你可以看到它丢弃了这'10.10.0.1':7对.

>>> a = {'192.168.1.21':23,'127.0.0.1':5,'12.12.12.12':5,'55.55.55.55':10}
>>> b = {'192.168.1.21':27,'10.10.0.1':7,'127.0.0.1':1}
>>> c = {}
>>> for elem in a:
...     c[elem] = b.get(elem, 0) + a[elem]
...
>>> print c
{'55.55.55.55': 10, '12.12.12.12': 5, '127.0.0.1': 6, '192.168.1.21': 50}
Run Code Online (Sandbox Code Playgroud)

计数正在加在一起,但如果密钥在dict中不存在,则会被删除.我无法搞清楚逻辑的最后一点......也许是b中elem的另一个:如果a.get(elem,0)存在:pass else将它添加到c?

eum*_*iro 5

如果你有Python 2.7+,请尝试collections.Counter

否则请尝试以下方法:

a = {'192.168.1.21':23,'127.0.0.1':5,'12.12.12.12':5,'55.55.55.55':10}
b = {'192.168.1.21':27,'10.10.0.1':7,'127.0.0.1':1}
c = {}
for dictionary in (a,b):
    for k,v in dictionary.iteritems():
        c[k] = c.get(k, 0) + v
Run Code Online (Sandbox Code Playgroud)


Dis*_*sie 5

>>> from collections import Counter
>>> a = {'192.168.1.21':23,'127.0.0.1':5,'12.12.12.12':5,'55.55.55.55':10}
>>> b = {'192.168.1.21':27,'10.10.0.1':7,'127.0.0.1':1}
>>> Counter(a) + Counter(b)
Counter({'192.168.1.21': 50, '55.55.55.55': 10, '10.10.0.1': 7, '127.0.0.1': 6, '12.12.12.12': 5})
Run Code Online (Sandbox Code Playgroud)


var*_*tec 5

在您的代码中替换c = {}c = b.copy()