python列表分组合并求和问题

Select
  • 42

在下工作中遇到如下问题,我有一个大的列表

lista = [
   ["a", "b", "c", 1],
   ["a", "b", "c", 2],
   ["d", "e", "f", 1],
   ["a", "c", "c", 2],
   ...
]

要合并以上列表, 前三项相同的列表进行合并,第四项相加,想要得到如下结果

lista = [
   ["a", "b", "c", 3],
   ["d", "e", "f", 1],
   ["a", "c", "c", 2],
   ...
]

可以覆盖原先lista,也可以不覆盖,生成大的listb列表也行,请问有大佬帮小弟指点下思路么

回复
阅读 646
2 个回答
✓ 已被采纳
from typing import DefaultDict


lista=[
    [1,2,3,1],
    [1,2,3,2],
    [1,3,2,1],
]

result=DefaultDict(int)

for k,v in zip(map(lambda i: tuple(i[:3]), lista),map(lambda i: i[3], lista)):
    result.update({k:result[k]+v})

print(result)

最终结果

defaultdict(<class 'int'>, {(1, 2, 3): 3, (1, 3, 2): 1})

转成你要的 lista 这种格式就好了。

PS:编辑器补全了一个错误的defaultdict我懒得改了。

pandas实现:

import pandas as pd

df=pd.DataFrame(lista,columns=["c1","c2","c3","v"])
listb=df.groupby(["c1","c2","c3"]).sum().reset_index().to_numpy().tolist()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏