首页 > 解决方案 > 通过多个元素列表对元素求和

问题描述

我有一个这样的清单。

['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]

标签: pythonlistgroup-by

解决方案


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)

推荐阅读