给定这样的设置:
class Foo():
state = 'x'
amount = 1
a = Foo()
b = Foo()
c = Foo()
c.state = 'y'
foos = [a, b, c]
我想得到一个具有keys = object.state
,values =的字典sum(object.amounts of objects with that state)
。在这种情况下:
{'x': 2, 'y': 1}
我想自动执行此操作,因此不需要提前知道不同的可能状态。
当然,我可以像这样无聊地迭代:
my_dict = {}
for foo in foos:
try:
my_dict[foo.state] += foo.value
except (KeyError, TypeError):
my_dict[foo.state] = foo.value
但是,这有点冗长,我想知道是否有更好的方法可以做到,例如对dict的理解等等,但是到目前为止,我的努力是徒劳的。
怎么样Counter
:
>>> from collections import Counter
>>>
>>> foos = [a,b,c]
>>>
>>> c = Counter()
>>> for x in foos:
c[x.state] += x.amount
>>> c
Counter({'x': 2, 'y': 1})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句