python - 如果元组具有相同的第一个元素,如何聚合元组列表的元素?

标签 python list aggregate

我有一个列表,其中每个值都是一个元组列表。例如,这是我为一个键提取的值:

     [('1998-01-20',8) , ('1998-01-22',4) , ('1998-06-18',8 ) , ('1999-07-15' , 7), ('1999-07-21',1) ]

我也对列表进行了排序。 现在我想像这样聚合值:

    [('1998-01' , 12 ) , ('1998-06' ,8 ) , ('1999-07',8 )]

在某种意义上,我想按月对元组进行分组,将每个月的整数加在一起,我已经阅读了有关 groupby 的内容,但我认为它对我的数据结构没有帮助,因为我不知道是什么我将在我的列表中面对,所以我试图找到一种方法来表达:如果 i[0][:6] 相等,则从元组的第一个元素开始:对 i[1] 求和。但我很难实现这个想法。

    for i in List :
        if i[0][:6] # *problem* I don't know how to say my condition :
        s=sum(i[1]) #?

我将不胜感激任何建议,因为我是 python 的新用户!

最佳答案

尝试使用 itertools.groupby 按月汇总值:

from itertools import groupby
a = [('1998-01-20', 8), ('1998-01-22', 4), ('1998-06-18', 8), 
     ('1999-07-15', 7), ('1999-07-21', 1)]

for key, group in groupby(a, key=lambda x: x[0][:7]):
    print key, sum(j for i, j in group)

# Output

1998-01 12
1998-06 8
1999-07 8

这是单行版本:

print [(key, sum(j for i, j in group)) for key, group in groupby(a, key=lambda x: x[0][:7])]

# Output

[('1998-01', 12), ('1998-06', 8), ('1999-07', 8)]

关于python - 如果元组具有相同的第一个元素,如何聚合元组列表的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25740726/

相关文章:

python - 如何在 VSCode 中整体执行 python 函数(它拆分并仅将第一行发送给解释器)

asp.net - Asp.net Web API 2.2 OData4 是否支持 group by 子句?

python - 从列表类别创建递归列表

java - 使用 foreach 在单行/表中显示多个列表

python - 按降序对相应字符串的数字进行排序

Python:递归方法回滚变化?

r - 在 R 数据框中,如何广播与维度相对应的列?

sql - 按另一个列值分组和计数

python - 动态嵌套循环-递归

python将时间添加到已经运行的倒计时