Skip to main content
 首页 » 编程设计

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

2025年05月04日22zhengyun_ustc

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

groupby 和 sum 在 pandas 中的作用非常相似。

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

这是我目前的解决方案。首先,获取 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'))})