python中列表元素的总和列表,如sql group by

时间:2016-07-28 22:45:03

标签: python list

我有一个列表列表(字符串,整数)

例如:

my_list=[["apple",5],["banana",6],["orange",6],["banana",9],["orange",3],["apple",111]]

我想总结相同的项目,最后得到这个:

my2_list=[["apple",116],["banana",15],["orange",9]]

5 个答案:

答案 0 :(得分:3)

from collections import defaultdict

my_list= [["apple",5],["banana",6],["orange",6],["banana",9],["orange",3],["apple",111]]

result = defaultdict(int)
for fruit, value in my_list:
    result[fruit] += value
result = result.items()

print result

或者您可以将结果保留为字典

答案 1 :(得分:3)

您可以在已排序列表中使用itertools.groupby

from itertools import groupby

my_list=[["apple",5],["banana",6],["orange",6],["banana",9],["orange",3],["apple",111]]

my_list2 = []
for i, g in groupby(sorted(my_list), key=lambda x: x[0]):
    my_list2.append([i, sum(v[1] for v in g)])

print(my_list2)
# [['apple', 116], ['banana', 15], ['orange', 9]]

说到SQL 分组依据预分类

  

groupby()的操作类似于Unix中的uniq过滤器。它   每次密钥的值生成一个中断或新的   功能变化(这就是为什么通常需要排序   数据使用相同的键功能)。该行为不同   SQL的GROUP BY聚合了常见元素而不管它们是什么   输入订单。

强调我的

答案 2 :(得分:1)

使用Pandas和groupby

import pandas as pd

>>> pd.DataFrame(my_list, columns=['fruit', 'count']).groupby('fruit').sum()
        count
fruit        
apple     116
banana     15
orange      9

答案 3 :(得分:0)

from itertools import groupby
[[k, sum(v for _, v in g)] for k, g in groupby(sorted(my_list), key = lambda x: x[0])]

# [['apple', 116], ['banana', 15], ['orange', 9]]

答案 4 :(得分:0)

如果您不想保留订单,请使用以下代码。

my_list=[["apple",5],["banana",6],["orange",6],["banana",9],["orange",3],["apple",111]]
my_dict1 = {}

for d in my_list:
   if d[0] in my_dict1.keys():
      my_dict1[d[0]] += d[1]
   else:
      my_dict1[d[0]] = d[1]

my_list2 = [[k,v] for (k,v) in my_dict1.items()]