有没有一种方法可以使用Counter
聚合列表中每个条目的值,而不仅仅是计算条目存在的时间?
例如,如果我有一个列表
from collections import Counter
lst = [
['John', 1],
['James', 2],
['John', 3],
['Andy', 1]
]
我做
total = Counter(name for name, num in lst)
print(total)
输出将是
Counter({'John': 2, 'James': 1, 'Andy': 1})
这是意料之中的事。我只是想知道是否有办法获得
Counter({'John': 4, 'James': 2, 'Andy': 1})
我知道有很多方法可以做到这一点,但我正在寻找一种使用Counter
的方法。
为发布的列表理解添加另一个级别的for循环
total = Counter(name for name, num in lst for _ in range(num))
print(total)
# Output: Counter({'John': 4, 'James': 2, 'Andy': 1})
您可以使用一个简单的循环来添加值:
total = Counter()
for name, num in lst:
total[name] += num
print(total) # -> Counter({'John': 4, 'James': 2, 'Andy': 1})
如果有一种方法可以在O(n(中的一行中做到这一点,我很想知道。
您需要循环浏览列表并相应地更新计数器。
c = Counter()
for k, v in lst:
c.update({k: v})
>>> print(c)
Counter({'John': 4, 'James': 2, 'Andy': 1})
你也可以使用列表理解,但不建议使用副作用理解:
[c.update({k: v}) for k, v in lst]
print(c)
输出是相同的。