首页 > 解决方案 > Python中列表列表中的元素求和

问题描述

我有以下类型的列表:

myList = [[500, 5], [500, 10], [500, 3], [504, 9], [505, 10], [505, 20]]

我不想让值具有相同的第一个元素,所以我想这样做:如果两个或多个元素具有相同的第一个值,则将具有相同第一个值的元素的所有第二个值相加并删除重复项,所以在我的例子中,新的输出是:

myList = [[500, 18], [504, 9], [505, 30]]

我怎样才能做到这一点?我正在考虑使用 Lambda 函数,但我不知道如何创建函数;我正在考虑的其他解决方案需要大量的 for 循环,所以我在想是否有更简单的方法来做到这一点。任何形式的帮助表示赞赏!

标签: pythonpython-3.x

解决方案


使用defaultdict

import collections

# by default, non-existing keys will be initialized to zero
myDict = collections.defaultdict(int)

for key, value in myList:
    myDict[key] += value

# transform back to list of lists
myResult = sorted(list(kv) for kv in myDict.items())

推荐阅读