无损添加或合并Python字典
我正在尝试统计两个服务器日志文件中的IP地址,并将这些统计数据合并在一起,确保不丢失任何元素或计数。我在另一个Stack Overflow的问题中找到了部分解决方案,但正如你所看到的,它丢失了'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}
现在计数是相加的,但如果在字典a中找不到某个键,它就会被丢掉。我在弄清楚最后那部分逻辑时遇到了困难……也许可以这样做:对于b中的每个元素,如果在a中找到了这个元素,就跳过;否则就把它加到c里?
6 个回答
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})
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
5
在你的代码中,把 c = {}
替换成 c = b.copy()
。