python - Python中列表列表中的元素求和
问题描述
我有以下类型的列表:
myList = [[500, 5], [500, 10], [500, 3], [504, 9], [505, 10], [505, 20]]
我不想让值具有相同的第一个元素,所以我想这样做:如果两个或多个元素具有相同的第一个值,则将具有相同第一个值的元素的所有第二个值相加并删除重复项,所以在我的例子中,新的输出是:
myList = [[500, 18], [504, 9], [505, 30]]
我怎样才能做到这一点?我正在考虑使用 Lambda 函数,但我不知道如何创建函数;我正在考虑的其他解决方案需要大量的 for 循环,所以我在想是否有更简单的方法来做到这一点。任何形式的帮助表示赞赏!
解决方案
使用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())
推荐阅读
- android - 如何使用此代码实现下一个和上一个按钮?
- audio - 使用 FFmpeg 将多个音频文件交叉淡化为一个?
- android - 无法运行 adb 进程
- python - 如何将列表中的某些分数分配给多个列表中的值并获取python中每个值的总和?
- c++ - 我在主函数的左括号上不断收到错误消息 obj\Debug\main.o||In function `ZN11linked_listC1Ev':|
- idris - 关于 `mod` 的 Idris 证明
- java - Java继承如何区分程序中的用户类型?
- java - 我可以在 BIRT 4.7 报表设计器中使用 SSL 证书连接到 MySQL 吗?
- imageview - 如何在 Android 8.0 Oreo 上调整图像视图的大小/缩放类型?
- python-3.x - Python: Use a for loop to get Nth number out of a list