考慮 Python 中的以下嵌套列表:[ ['Val1', 1, 'X'], ['Val2', 1, 'X'], ['Val2', 2, 'Y'], ['Val3', 2, 'Y'], ['Val4', 2, 'Y'], ['Val4', 3, 'Z'], ['Val5', 3, 'Z'], ['Val6', 3, 'Z'],]索引 0 處有重復項。我想從中獲取一個新列表,刪除重復項,保留索引 1 處具有最高值的列表。在上面的示例中,結果列表應如下所示:[ ['Val1', 1, 'X'], ['Val2', 2, 'Y'], ['Val3', 2, 'Y'], ['Val4', 3, 'Z'], ['Val5', 3, 'Z'], ['Val6', 3, 'Z'],]
3 回答

手掌心
TA貢獻1942條經驗 獲得超3個贊
>>> from itertools import groupby >>> [max(g, key=lambda i: i[1]) for k, g in groupby(data, lambda i: i[0])] [['Val1', 1, 'X'], ['Val2', 2, 'Y'], ['Val3', 2, 'Y'], ['Val4', 3, 'Z'], ['Val5', 3, 'Z'], ['Val6', 3, 'Z']]

jeck貓
TA貢獻1909條經驗 獲得超7個贊
使用熊貓
x = [['Val1', 1, 'X'],
['Val2', 1, 'X'],
['Val2', 2, 'Y'],
['Val3', 2, 'Y'],
['Val4', 2, 'Y'],
['Val4', 3, 'Z'],
['Val5', 3, 'Z'],
['Val6', 3, 'Z']]
import pandas as pd
pd.DataFrame(x).sort_values([0, 1]).drop_duplicates(subset=[0], keep='last').values.tolist()

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
步驟1:根據第二個屬性排序。步驟2:根據第一個屬性進行排序。由于排序在 python 中是“穩定的”,因此步驟 1 中的排序順序將在步驟 2 之后保留。
l?=?#?list?of?similarly?formatted?lists l?=?sorted(l,?key=itemgetter(1)) l?=?sorted(l,?key=itemgetter(0))
或者,編寫您自己的比較鍵函數。我認為這實際上應該有效,因為元組是按從左到右的順序進行比較的:
l?=?sorted(l,?key=tuple)
添加回答
舉報
0/150
提交
取消