我正在尝试合并来自多个服务器的日志。每个日志都是一个元组列表(date
, count
)。date
可能会出现多次,我希望最终生成的字典将保存来自所有服务器的所有计数的总和。
这是我的尝试,附带一些示例数据:
from collections import defaultdict
a=[("13.5",100)]
b=[("14.5",100), ("15.5", 100)]
c=[("15.5",100), ("16.5", 100)]
input=[a,b,c]
output=defaultdict(int)
for d in input:
for item in d:
output[item[0]]+=item[1]
print dict(output)
这将会得到:
{'14.5': 100, '16.5': 100, '13.5': 100, '15.5': 200}
果然如此。
我即将因为一位同事看到了这段代码而疯狂。她坚持认为必须有一种更加Pythonic和优雅的方式来完成,而不需要这些嵌套的for循环。你们有什么想法吗?
Counter()
只计算出现次数,而且由于值已经预先填充,它在这种情况下不起作用。 - Christian Wittsdict([(k, sum([v2 for k2,v2 in a+b+c if k2==k])) for k,v in a+b+c])
- krethika