为了账号安全,请及时绑定邮箱和手机立即绑定

在我的列表中查找最高版本

在我的列表中查找最高版本

沧海一幻觉 2022-04-23 21:38:41
我有一个列表列表:['test', 'testlink', 1]['test', 'testlink', 2]['test ', 'testlink', 3]['test ', 'testlink', 4]['test 2', 'test2link', 1]['test 2', 'test2link', 2]['test 3', 'test3link', 1]['test 3', 'test3link', 3]['test 3', 'test3link', 4]我想过滤列表以返回每个唯一第一个元素的第三个元素的最大值。我想要的结果是:['test ', 'testlink', 4]['test 2', 'test2link', 2]['test 3', 'test3link', 4]我正在努力寻找一种方法来做到这一点。下面的代码块进入我的排序列表,但在那之后我被卡住了。#create some dummy datarows=[]rows.append(["test","testlink",1])rows.append(["test 2","test2link",1])rows.append(["test 3","test3link",1])rows.append(["test","testlink",2])rows.append(["test","testlink",1])rows.append(["test 2","test2link",1])rows.append(["test 3","test3link",1])rows.append(["test ","testlink",3])rows.append(["test 3","test3link",3])rows.append(["test ","testlink",4])rows.append(["test 3","test3link",4])rows.append(["test 2","test2link",2])#filter out duplicatesnewRows = []for elem in rows:    if elem not in newRows:        newRows.append(elem)rows = newRows#sort the listsrows = sorted(rows,key=lambda x: (x[0],x[2]))谢谢所有排序给出的答案都可以在我的 Ironpython 环境中工作
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您可以使用defaultdict:


from collections import defaultdict


l = [['test', 'testlink', 1],

     ['test', 'testlink', 2],

     ['test', 'testlink', 3],

     ['test', 'testlink', 4],

     ['test 2', 'test2link', 1],

     ['test 2', 'test2link', 2],

     ['test 3', 'test3link', 1],

     ['test 3', 'test3link', 3],

     ['test 3', 'test3link', 4]]


d = defaultdict(int)

for first, second, third in l:

    if d[(first, second)] < third:

       d[(first, second)] = third

要形成您想要使用下一行的格式的结果:


res = [[*key, value] for key, value in d.items()]

如果您不想导入defaultdict,可以使用常规的:


d = {}

for first, second, third in l:

    item = d.get((first, second), None)

    if not item or item < third:

       d[(first, second)] = third


查看完整回答
反对 回复 2022-04-23
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

使用itertools.groupby(doc)的一种解决方案:


rows=[]

rows.append(["test","testlink",1])

rows.append(["test 2","test2link",1])

rows.append(["test 3","test3link",1])

rows.append(["test","testlink",2])

rows.append(["test","testlink",1])

rows.append(["test 2","test2link",1])

rows.append(["test 3","test3link",1])

rows.append(["test ","testlink",3])

rows.append(["test 3","test3link",3])

rows.append(["test ","testlink",4])

rows.append(["test 3","test3link",4])

rows.append(["test 2","test2link",2])


from itertools import groupby


out = []

for v, g in groupby(sorted(rows, key=lambda k: k[0].strip()), lambda k: k[0].strip()):

    item = max(g, key=lambda k: k[2])

    out.append(item)


from pprint import pprint

pprint(out)

印刷:


[['test ', 'testlink', 4],

 ['test 2', 'test2link', 2],

 ['test 3', 'test3link', 4]]


查看完整回答
反对 回复 2022-04-23
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信