【发布时间】:2012-07-02 15:44:37
【问题描述】:
我正在尝试合并来自多台服务器的日志。每个日志都是一个元组列表(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 循环。有什么想法吗?
【问题讨论】:
-
@AshwiniChaudhary:
Counter()只计算出现次数,并且由于这些值已经预先填充,因此不适用于这种情况。 -
@ChristianWitts 在下面查看我的解决方案。
-
对我来说似乎不符合 Python 标准的是花时间担心让完全清晰的代码更符合 Python 风格。需要数小时思考的 Python 风格并不是真正的 Python 风格。
-
@AshwiniChaudhary:你每天都能学到新东西 :)
-
不必要的 1-liner(值得投诉,与您的代码不同):
dict([(k, sum([v2 for k2,v2 in a+b+c if k2==k])) for k,v in a+b+c])
标签: python dictionary