有一个 pairs 列表,(ключ,значение)
键可以重复。我想以汇总Counter
相同键的值的方式收集所有内容。
我可以这样做:tio.run
from collections import Counter
a = [("A",3), ("B",10), ("A",8), ("C",1)]
c = Counter()
for k,v in a: c[k] += v
print(c) # Counter({'A': 11, 'B': 10, 'C': 1})
有没有更漂亮的方法来获得相同的?
“有没有更漂亮的方法来得到同样的东西?” - 每个人都有自己的美丽:)
相同,没有额外的模块:
输出:{'A': 11, 'B': 10, 'C': 1}
方法有不同的目标:美丽或速度
结果:
结果很明显
您的选择可能在速度上没有可比性。
需要
c[k] += v
在Counter
(的直接后代dict
)中执行的操作不会被覆盖,并且与在中一样快,dict
因为它们是本机实现的。但是所有特定于操作的操作Counter
(除了使用 iterable 进行初始化/更新)都是用 python 编写的,并且预计会慢得多。但这里有几个选项可以增强美感
最好的情况是,这两个选项都比你的慢,最坏的情况是 - 只是慢了很多。
事实上,事实证明
Counter
你根本不用 main 功能,那还不如拿来用defaultdict
,这样会更快(但仍然比计数器字典“手动”检查元素是否存在要慢):使用线性渐近法测量建议的答案:计数器是最慢的 - 比其他方法差大约 2 倍,并且使用字典,所有方法都给出误差范围内的结果。tio.run
结果: