Skip to main content
 首页 » 编程设计

Python 分组和求和

2025年05月04日15jackei

我有一个元组列表:

Listoftuples=[ 
    (0.021892733407683305, 0.14887058717224647, 4.573173081530965, 0.04619366749021177, u'0102'), 
    (0.08416364174734663, 0.8500527816482009, 23.649983331004403, 0.0, u'0103'), 
    (0.02181070623592521, 0.15049387302788395, 1.2098398749067714, 1.6037412295275804, u'0102') 
    ] 

我想要每组(组 = 元组中的最后一个值,例如 u'0102'):

  • 总结第一个值
  • 总结第二个值并除以第一个值的总和

尝试:

import itertools 
 
Listoftuples=[ 
    (0.021892733407683305, 0.14887058717224647, 4.573173081530965, 0.04619366749021177, u'0102'), 
    (0.08416364174734663, 0.8500527816482009, 23.649983331004403, 0.0, u'0103'), 
    (0.02181070623592521, 0.15049387302788395, 1.2098398749067714, 1.6037412295275804, u'0102') 
    ] 
 
keyfunc=lambda t: (t[4]) 
Listoftuples.sort(key=keyfunc) 
 
for key,rows in itertools.groupby(Listoftuples, keyfunc): 
    sumOfFirstValue = sum(r[0] for r in rows) 
    sumOfSecondDividedBySumOfFirst= sum(r[1] for r in rows)/sumOfFirstValue 
    print key,sumOfFirstValue,sumOfSecondDividedBySumOfFirst 

结果:

0102 0.0437034396436 0.0 
0103 0.0841636417473 0.0 

最后是零值。我该如何解决?

请您参考如下方法:

一个常见的错误是认为 groupby 返回的 rows 是一个具体的列表。实际上它是一个迭代器,在计算 sumOfFirstValue 时被耗尽。解决方法是:

... 
for key,rows in itertools.groupby(Listoftuples, keyfunc): 
    rows = list(rows) 
    ...