Python - 分组并列出元组列表 [英] Python - Group by and sum a list of tuples

查看:185
本文介绍了Python - 分组并列出元组列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



  [
('A','',Decimal('4.0000000000' ),1330,datetime.datetime(2012,6,8,0,0)),
('B','',Decimal('31 .0000000000'),1330,datetime.datetime(2012,6,4 ,0,0)),
('AA','C',十进制('31 .0000000000'),1330,datetime.datetime(2012,5,31,0,0)),
'B','',Decimal('7.0000000000'),1330,datetime.datetime(2012,5,24,0,0)),
('A','',Decimal('21 .0000000000')) ,1330,datetime.datetime(2012,5,14,0,0))
]

我想将这些按照元组中的第一,第二,第四和第五列进行分组,然后总结第三列。
在这个例子中,我将列命名为col1,col2,col3,col4,col5。



在SQL中,我会这样做: p>

 从我的表中选择col1,col2,sum(col3),col4,col5 
通过col1,col2,col4, col5

有没有一种酷的方式来做到这一点,或者它是一个手动循环? p>

解决方案

 >>> (x,y)在
中的[(x [0:2] +(sum(z [2] for z in y),)+ x [2:5] key = operator.itemgetter(0,1,3,4)),
key = operator.itemgetter(0,1,3,4))]
['b','A', '',Decimal('21 .0000000000'),1330,datetime.datetime(2012,5,14,0,0)),
('A','',Decimal('4.0000000000'),1330,datetime .datetime(2012,6,8,0,0)),
('AA','C',Decimal('31 .0000000000'),1330,datetime.datetime(2012,5,31,0,0 )),
('B','',Decimal('7.0000000000'),1330,datetime.datetime(2012,5,24,0,0)),
('B',' ',Decimal('31 .0000000000'),1330,datetime.datetime(2012,6,4,0,0))
]

(注意:重新输出格式)

Given the following list:

[
    ('A', '', Decimal('4.0000000000'), 1330, datetime.datetime(2012, 6, 8, 0, 0)),
    ('B', '', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 6, 4, 0, 0)),
    ('AA', 'C', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 5, 31, 0, 0)),
    ('B', '', Decimal('7.0000000000'), 1330, datetime.datetime(2012, 5, 24, 0, 0)),
    ('A', '', Decimal('21.0000000000'), 1330, datetime.datetime(2012, 5, 14, 0, 0))
]

I would like to group these by the first, second, fourth and fifth columns in the tuple and sum the 3rd. For this example I'll name the columns as col1, col2, col3, col4, col5.

In SQL I would do something like this:

select col1, col2, sum(col3), col4, col5 from my table
group by col1, col2, col4, col5

Is there a "cool" way to do this or is it all a manual loop?

解决方案

>>> [(x[0:2] + (sum(z[2] for z in y),) + x[2:5]) for (x, y) in
      itertools.groupby(sorted(L, key=operator.itemgetter(0, 1, 3, 4)),
      key=operator.itemgetter(0, 1, 3, 4))]
[
  ('A', '', Decimal('21.0000000000'), 1330, datetime.datetime(2012, 5, 14, 0, 0)),
  ('A', '', Decimal('4.0000000000'), 1330, datetime.datetime(2012, 6, 8, 0, 0)),
  ('AA', 'C', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 5, 31, 0, 0)),
  ('B', '', Decimal('7.0000000000'), 1330, datetime.datetime(2012, 5, 24, 0, 0)),
  ('B', '', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 6, 4, 0, 0))
]

(NOTE: output reformatted)

这篇关于Python - 分组并列出元组列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆