python类sql group by中列表元素的总和列表
我有一个列表列表(字符串、整数) 例如: 我想对相同的项目求和,最后得到:python类sql group by中列表元素的总和列表,python,list,Python,List,我有一个列表列表(字符串、整数) 例如: 我想对相同的项目求和,最后得到: my2_list=[["apple",116],["banana",15],["orange",9]] 或者,您可以将结果保留为字典,您可以在排序列表中使用: 说到SQL分组依据和预排序: groupby()的操作类似于Unix中的uniq筛选器。信息技术 每次键的值更改时生成一个中断或新的组 功能更改(这就是为什么通常需要对进行排序的原因 使用同一按键功能的数据)。那种行为不同于 SQL的组,通过该组聚合公共元素,
my2_list=[["apple",116],["banana",15],["orange",9]]
或者,您可以将结果保留为字典,您可以在排序列表中使用:
说到SQL分组依据和预排序:
groupby()
的操作类似于Unix中的uniq筛选器。信息技术
每次键的值更改时生成一个中断或新的组
功能更改(这就是为什么通常需要对进行排序的原因
使用同一按键功能的数据)。那种行为不同于
SQL的组,通过该组聚合公共元素,而不考虑其属性
输入顺序
使用熊猫和groupby强调地雷:
import pandas as pd
>>> pd.DataFrame(my_list, columns=['fruit', 'count']).groupby('fruit').sum()
count
fruit
apple 116
banana 15
orange 9
如果您不想保留订单,请使用以下代码
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()]
您不需要在key@MosesKoledoye它似乎是这样工作的,但找不到任何文档确认它将按子列表的第一个元素进行排序。如果未提供排序键,则直接比较元素:
['a',2]<['b',5]->True
。我认为把类似的物品作为邻居放在一起进行分类就足够了,因为这种情况下的顺序并不完全相同needed@MosesKoledoye很好。在看了列表是如何比较的之后,它现在变得非常有意义了。谢谢你指出这一点。
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]]
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]]
import pandas as pd
>>> pd.DataFrame(my_list, columns=['fruit', 'count']).groupby('fruit').sum()
count
fruit
apple 116
banana 15
orange 9
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()]