gpt4 book ai didi

元组的 Python 列表 : sum second val of each tuple, 仅当元组的第一个值 == something

转载 作者:行者123 更新时间:2023-11-28 19:32:08 25 4
gpt4 key购买 nike

我有一个“标记的”元组列表...其中每个元组是 (tag_id, value)...像这样:

my_list = [(tag_A, 100), (tag_A, 200), (tag_A, 300), (tag_A, 400), (tag_B, 400), (tag_B, 600)]

我想用相同的标签对每个元组的值求和...这样:

sum_of_all_values_with_tag_A() = 1000

sum_of_all_values_with_tag_B() = 1000

我想不出一个简单的 Pythonic 方法来做到这一点。

sum(set(value for tag_id, value in my_list)) 

...返回所有值的总和。

我想我可以用 for 或 while 循环包装它,这样只有带有我想求和的标签的元组才会被该表达式触及......?我需要对与两个标签关联的值求和...产生两个不同的总数,如上所示进行区分。但是对于这样的事情不能完全理解优雅的语法。

这是在预先存在的函数内部发生的。如果没有嵌套函数,那就太好了。

如有任何建议,我们将不胜感激!

最佳答案

使用生成器表达式对每个标签求和:

sum(val for tag, val in my_list if tag == tag_A)

您可以对标签进行排序,然后使用 itertools.groupby 创建每个标签的组和总和:

from itertools import groupby
from operator import itemgetter

key = itemgetter(0) # tag
sums = {tag: sum(tup[1] for tup in group)
for tag, group in groupby(sorted(my_list, key=key), key=key)}

这将生成一个字典映射标签到每个标签的总和:

>>> from itertools import groupby
>>> from operator import itemgetter
>>> tag_A, tag_B = 'A', 'B'
>>> my_list = [(tag_A, 100), (tag_A, 200), (tag_A, 300), (tag_A, 400), (tag_B, 400), (tag_B, 600)]
>>> key = itemgetter(0) # tag
>>> sums = {tag: sum(tup[1] for tup in group)
... for tag, group in groupby(sorted(my_list, key=key), key=key)}
>>> print sums
{'A': 1000, 'B': 1000}

关于元组的 Python 列表 : sum second val of each tuple, 仅当元组的第一个值 == something,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com