你可以使用itertools.groupby
:
from itertools import groupby
from operator import itemgetter as ig
data = [[10,1,3,6],[22,3,5,7],[2,1,4,7],[44,3,1,0]]
# filter and sort by main key
valid_sorted = sorted((el for el in data if el[3] != 0), key=ig(1))
# ensure identical keys have highest first element first
valid_sorted.sort(key=ig(0), reverse=True)
# group by second element
grouped = groupby(valid_sorted, ig(1))
# take first element for each key
selected = [next(item) for group, item in grouped]
print selected
# [[22, 3, 5, 7], [10, 1, 3, 6]]
或使用dict
:
d = {}
for el in valid_sorted: # doesn't need to be sorted - just excluding 4th == 0
d[el[1]] = max(d.get(el[1], []), el)
print d.values()
# [[10, 1, 3, 6], [22, 3, 5, 7]]