从元组列表中,我想识别元组,它具有元组[2]的最大值(即第三个值),但是相同的值
即。从
searchlist = [(a,b,2),(a,b,3),(a,b,4),(a,b,5),(x,y,2),(x,y,4)]
我想找到
result = [(a,b,5),(x,y,4)]
答案 0 :(得分:4)
您可能首先sort您的值,然后您就可以使用groupby()
对具有相同的两个第一个元素的值进行分组。最后,max()
可以检索每个值的最大值。
from itertools import groupby
a, b, x, y = "a", "b", "x", "y"
searchlist = [(a,b,2),(a,b,3),(a,b,4),(a,b,5),(x,y,2),(x,y,4)]
searchlist.sort()
grouped = groupby(searchlist, key=lambda v: (v[0], v[1]))
maximums = [max(groups) for value, groups in grouped]
print(maximums)
# [("a", "b", 5), ("x", "y", 4)]
答案 1 :(得分:3)
from itertools import groupby
searchlist = [('a','b',2),('a','b',3),('a','b',4),('a','b',5),('x','y',2),('x','y',4)]
result = [max(v, key = lambda x: x[2]) for g, v in groupby(sorted(searchlist), key = lambda x: x[:2])]
答案 2 :(得分:0)
Python sorting how to告诉我们在python中进行排序的功能。
根据需要使用reverse=True
按降序排列。
In [62]: sorted(searchlist, key=lambda a: (a[2], a[1], a[0]), reverse=True)
Out[62]:
[('a', 'b', 5),
('x', 'y', 4),
('a', 'b', 4),
('a', 'b', 3),
('x', 'y', 2),
('a', 'b', 2)]
答案 3 :(得分:0)
这是我过去用来完成类似事情的东西
ssh -X user@server.
答案 4 :(得分:0)
我们可以循环遍历元组的搜索列表列表并检查第三个元素的值,并将前两个元素作为dict键放置如下:
val = 0
for a, b, value in searchlist:
key = "%s-%s" %(a,b)
if value > val and key in dict_val:
elem = (a, b, value)
dict_val[key] = elem
print dict_val.values()