如何获得python元组列表中所有键的总和?
我对 python 很陌生,我想知道如何从元组列表中获取以下字典?
题
x = [('A',1),('B',2),('C',3),('A',10),('B',10)]
required_dict = {'A': 11,'B': 12, 'C': 3}
回答
IMO 使用的最简单方法defaultdict和单个for循环:
from collections import defaultdict
required_dict = defaultdict(int)
for k, v in x:
required_dict[k] += v
您也可以使用嵌套理解在一行中执行此操作,但这效率较低,因为它涉及重复迭代x而不是单次执行:
required_dict = {k: sum(v for k1, v in x if k1 == k) for k, v in x}
另一个不涉及冗余迭代的基于理解的解决方案是使用groupby,以便仅在每组相同的键内进行迭代:
from itertools import groupby
required_dict = {
k: sum(v for _, v in g)
for k, g in groupby(sorted(x), key=lambda t: t[0])
}
这三种方法分别是:
- O(n)(单次迭代)
- O(n^2)(对每个元素重新迭代)
- O(nlogn)(完整排序后跟单次迭代)