我有一个属性为 "Type"
的项目列表和 "Time"
我想快速总结每个 "Type"
的时间并附加到另一个列表。该列表如下所示:
Items = [{'Name': A, 'Type': 'Run', 'Time': 5},
{'Name': B, 'Type': 'Walk', 'Time': 15},
{'Name': C, 'Type': 'Drive', 'Time': 2},
{'Name': D, 'Type': 'Walk', 'Time': 17},
{'Name': E, 'Type': 'Run', 'Time': 5}]
我想做这样的事情:
Travel_Times=[("Time_Running","Time_Walking","Time_Driving")]
Run=0
Walk=0
Drive=0
for I in Items:
if I['Type'] == 'Run':
Run=Run+I['Time']
elif I['Type'] == 'Walk':
Walk=Walk+I['Time']
elif I['Type'] == 'Drive':
Drive=Drive+I['Time']
Travel_Times.append((Run,Walk,Drive))
与 Travel_Times
最后看起来像这样:
print(Travel_Times)
[("Time_Running","Time_Walking","Time_Driving")
(10,32,2)]
这看起来应该很容易通过列表理解或类似于 collections.Counter
的东西高效地完成。 ,但我想不通。我想到的最好方法是对每个“类型”使用单独的列表理解,但这需要反复遍历列表。我将不胜感激有关如何加快速度的任何想法。
谢谢
最佳答案
注意大小写在 Python 中非常重要:
For
不是一个有效的陈述Travel_times
与Travel_Times
不同elif
之后没有:
Travel_Times.append(...
有一个前导空格,这让 Python 感到困惑items
有一个[
too manyA
未定义
话虽如此,一个Counter
对你的例子来说工作得很好:
from collections import Counter
time_counter = Counter()
items = [{'Name': 'A', 'Type': 'Run', 'Time': 5},
{'Name': 'B', 'Type': 'Walk', 'Time': 15},
{'Name': 'C', 'Type': 'Drive', 'Time': 2},
{'Name': 'D', 'Type': 'Walk', 'Time': 17},
{'Name': 'E', 'Type': 'Run', 'Time': 5}]
for item in items:
time_counter[item['Type']] += item['Time']
print(time_counter)
# Counter({'Walk': 32, 'Run': 10, 'Drive': 2})
获取元组列表:
[tuple(time_counter.keys()), tuple(time_counter.values())]
# [('Run', 'Drive', 'Walk'), (10, 2, 32)]
关于python - 按类型有效地汇总项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43377302/