亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

滄海一幻覺 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 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號