从元组列表中,找到具有某个索引的最大值的元组,其中元组的其余部分是相同的

时间:2015-11-21 16:24:06

标签: python sorting tuples filtering

从元组列表中,我想识别元组,它具有元组[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)]

5 个答案:

答案 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()