如果返回的顺序并不重要,你可以尝试使用groupby
从itertools
到组项目(用第一个元素排序后),然后用max
函数拉出最大值(同样,应该注意,这将返回一个新列表而不是修改到位):
In [1]: from itertools import groupby
In [2]: l = [[['a'],[24],214,1] ,[['b'],[24],312,1] ,[['a'],[24],3124,1] , [['c'],[24],34,1]]
In [3]: result = []
In [4]: for k, g in groupby(sorted(l, key=lambda x: x[0]), key=lambda x: x[0]):
...: result.append(max(g, key=lambda m: m[2]))
...:
...:
In [5]: result
Out[5]: [[['a'], [24], 3124, 1], [['b'], [24], 312, 1], [['c'], [24], 34, 1]]
这个扩展了一下,如果你想保持原有的秩序,可以通过包括只有那些项目是results
修改l
,这将维持秩序:
In [6]: l = [i for i in l if i in result]
In [7]: l
Out[7]: [[['b'], [24], 312, 1], [['a'], [24], 3124, 1], [['c'], [24], 34, 1]]
而且该组合成的一个真正的憎恶一个内胆,你可以(但可能不应该:))做到这一点:保留原来的顺序,只删除任何项目,其中比较值低于最大值
In [10]: l = [[['a'],[24],214,1] ,[['b'],[24],312,1] ,[['a'],[24],3124,1] , [['c'],[24],34,1]]
In [11]: [i for i in l if i in [max(g, key=lambda m: m[2]) for k, g in groupby(sorted(l, key=lambda x: x[0]), key=lambda x: x[0])]]
Out[11]: [[['b'], [24], 312, 1], [['a'], [24], 3124, 1], [['c'], [24], 34, 1]]
对不起。我会尽快做到这一点。 – user1718064
很好地纠正:)订单是否重要? – RocketDonkey