python - 按类型有效地汇总项目

标签 python python-3.x iteration list-comprehension

我有一个属性为 "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_timesTravel_Times 不同
  • elif之后没有:
  • Travel_Times.append(... 有一个前导空格,这让 Python 感到困惑
  • items 有一个 [ too many
  • A 未定义

话虽如此,一个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/

相关文章:

multithreading - 如何编写基于线程的并行列表迭代?

javascript - 迭代关联数组的前 x 个元素

python - 使用子结果聚合多个类别

php - 下面这段代码是否需要迭代?

python - 一种制作包含所有可能列的二维数组的优雅方法

python - 如何使用 OpenCV 在 Python 中查找图像的平均颜色?

python - 类构造函数可以返回子类吗?

python - 如何在 python 3 中从 resource_stream 加载 json

python - QGraphicsPathItem .setPen() 影响文本样式

python - 如何有效地将 numpy 数组的一列舍入到最接近的 0.5?