Python - 按属性列表中的唯一属性求和

标签 python list object list-comprehension

如果我有一个对象列表 listOfObj,并且每个对象至少有 2 个属性,一个 obj.value,它是一个 float ,和 obj.name,这是一个字符串,通过列表中每个唯一的 obj.name 获取所有 obj.value 的总和的最佳方法是什么?

groupbysumpandas 中的作用非常相似。

我可以想到一种粗略的方法来做到这一点,但我想知道(而且我很确定有)是否有更优雅的方法来做到这一点。

这是我目前的解决方案。首先,获取 listOfObj 中所有唯一的 name:

unique_atts = {obj.name for obj in listofObj}

然后,对每个属性执行单独的sum 操作,例如

sum_n = sum([obj.value for obj in listOfObj if obj.name == unique_atts[n]])

显然,这不是最好的方法。解决这个问题的最佳方法是什么?谢谢。

最佳答案

在以 operator.attrgetter('name') 为键排序后使用 itertools.groupby

from itertools import groupby
from operator import attrgetter
print({k: sum(o.value for o in g) for k, g in groupby(sorted(listOfObj, key=attrgetter('name')), attrgetter('name'))})

关于Python - 按属性列表中的唯一属性求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51512474/

相关文章:

python - PySide2 拖放功能不起作用

python - django for 循环遍历列表

python - 在python列表中合并列表

python - 将文本文件中的行追加到列表中时,会将整行设置为字符串。如何识别文本文件中的不同数据类型?

Javascript Array 以不同的方式表现

python - 如何根据具有两个键值对的字典列表中的另一个 k-v 对的值从一个键值对创建值列表

python - 使用 tkMessageBox 时摆脱顶层 tk panedwindow

python - numba nopython 模式 "Undefined variable ' $313。 3'"

c++ - 如何创建类模板数组?

c# - Xamarin C# - IMKAnnotation 不包含 'x' 的定义