我有一个列表列表(字符串,整数)
例如:
my_list=[["apple",5],["banana",6],["orange",6],["banana",9],["orange",3],["apple",111]]
我想总结相同的项目,最后得到这个:
my2_list=[["apple",116],["banana",15],["orange",9]]
答案 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()]