python - 通过多个元素列表对元素求和
问题描述
我有一个这样的清单。
['1', ['A'], '1', '78', '1', 7.8]
['1', ['A'], '2', '87', '1', 34.8]
['1', ['A'], '3', '95', '1', 47.5]
['1', ['A'], '4', '32', '2', 12.8]
['1', ['A'], '5', '65', '2', 39.0]
['1', ['A'], '6', '78', '3', 70.2]
['1', ['A'], '7', '40', '3', 4.0]
['2', ['B'], '1', '78', '1', 7.8]
['2', ['B'], '2', '87', '1', 34.8]
假设元素[0] 是角色编号,元素[4] 是课程ID。最后一个元素是等级。我想在总结成绩时按角色编号和课程 ID 对列表进行分组。
输出应该像
['1', ['A'], '1', '78', '1', 90.1]
['1', ['A'], '4', '32', '2', 51.8]
['1', ['A'], '6', '78', '3', 74.2]
['2', ['B'], '1', '78', '1', 42.6]
解决方案
import itertools
gkey = lambda x: (x[0] + x[4])
rolenumber = [ ['1', 'A', '1', '78', '1', 7.8],
['1', 'A', '2', '87', '1', 34.8],
['1', 'A', '3', '95', '1', 47.5],
['1', 'A', '4', '32', '2', 12.8],
['1', 'A', '5', '65', '2', 39.0],
['1', 'A', '6', '78', '3', 70.2],
['1', 'A', '7', '40', '3', 4.0],
['2', 'B', '1', '78', '1', 7.8],
['2', 'B', '2', '87', '1', 34.8]]
for k, g in itertools.groupby(rolenumber, gkey):
nl1 = list(g)
res = list()
for i in range(len(nl1)):
nl2 = nl1[i]
if i == 0:
res.extend(nl2)
else:
res[5] += nl2[5]
print(res)
推荐阅读
- node.js - NodeJS cloudinary search API by context
- javascript - Axios 参数不起作用,但硬编码的 url 有效?
- c# - 如何在 datagridview c#.net 中使 DataGridViewButtonColumn 的标题不可点击
- javascript - ffmpeg 的问题(不加载歌曲?) - ffmpeg 流:写 EPIPE
- java - Java:如何防止我的函数打印尾随逗号?
- angularjs - 输入和提交的内容仍然连接
- python - 从 DB 触发带有日期时间的预定事件的最佳工具是什么?
- mysql - ERROR 1356 (HY000): View 'mysql.user' references invalid table(s) or column(s) or function(s) or definitioner/invoker of view缺少使用它们的权限
- r - ggplot2:条形图中的y轴缩放问题
- java - 如何在主类中调用数组方法