如何获得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)(完整排序后跟单次迭代)

以上是如何获得python元组列表中所有键的总和?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>