如何拆分Lis的密钥

2024-09-23 00:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望两种情况下的输出相同:

1)testList = [("Sita", 1), ("Sita", 2), ("Ram", 3), ("Ram", 4), ("Shyam", 5)]

我有第一个案例的解决方案

    out1 = list(map(lambda v:(v[0], sum(map(itemgetter(1), v[1]))), groupby(testList, itemgetter(0))))
print(out1)

(二)

testList = [("Sita_English", 1), ("Sita_Maths", 2), ("Ram_English", 3), ("Ram_Maths", 4), ("Shyam_English", 5)]

并希望获得与第一种情况相同的输出:

输出:

[('Sita', 3), ('Ram', 7), ('Shyam', 5)]

Tags: lambdamapenglish情况解决方案案例listram
1条回答
网友
1楼 · 发布于 2024-09-23 00:26:16

您可以在'_'上拆分,并将其保持为keygroup

out1 = list(map(lambda v: (v[0], sum(map(itemgetter(1), v[1]))), groupby(testList, key=lambda x: x[0].split('_')[0])))

更具可读性的版本是它的等效列表理解:

out1 = [(k, sum(x[1] for x in g)) for k, g in groupby(testList, key=lambda x: x[0].split('_')[0])]

这需要所有的'Sita''Ram''Shyam'结合在一起。在else情况下,您需要在执行groupby之前按名称排序

相关问题 更多 >