Python 在具有相同第一个元素的所有值中,查找第二个元素最大的元组

Python 在具有相同第一个元素的所有值中,查找第二个元素最大的元组,python,tuples,Python,Tuples,如何清理给定的元组列表,以便只列出具有最大值的元组 mytup = [('a',2),('a',6),('b',4),('a',4),('b',10),('c',4),('c',6),('c',8),('d',12),('d',10)] 结果 [('a',6), ('b', 10), ('c', 8), ('d', 12)] 把它变成字典: mytup = [('a',2),('a',6),('b',4),('a',4),('b',10),('c',4),('c',6),('c',8),('

如何清理给定的元组列表,以便只列出具有最大值的元组

mytup = [('a',2),('a',6),('b',4),('a',4),('b',10),('c',4),('c',6),('c',8),('d',12),('d',10)]
结果

[('a',6), ('b', 10), ('c', 8), ('d', 12)]

把它变成字典:

mytup = [('a',2),('a',6),('b',4),('a',4),('b',10),('c',4),('c',6),('c',8),('d',12),('d',10)]
d = {}

for key, value in mytup:
    if d.get(key) < value:  # d.get(key) returns None if the key doesn't exist
        d[key] = value      # None < float('-inf'), so it'll work

result = d.items()
mytup=[('a',2),('a',6),('b',4),('a',4),('b',10),('c',4),('c',6),('c',8),('d',12),('d',10)]
d={}
对于键,mytup中的值:
如果d.get(key)
将其转换为字典:

mytup = [('a',2),('a',6),('b',4),('a',4),('b',10),('c',4),('c',6),('c',8),('d',12),('d',10)]
d = {}

for key, value in mytup:
    if d.get(key) < value:  # d.get(key) returns None if the key doesn't exist
        d[key] = value      # None < float('-inf'), so it'll work

result = d.items()
mytup=[('a',2),('a',6),('b',4),('a',4),('b',10),('c',4),('c',6),('c',8),('d',12),('d',10)]
d={}
对于键,mytup中的值:
如果d.get(key)
我认为这应该有效:

dict = {}
for key, val in mytup:
    try:
        if dict[key] < val:
            dict[key] = val
    except IndexError:
        dict[key] = val
dict={}
对于键,mytup中的val:
尝试:
如果dict[key]
我认为这应该有效:

dict = {}
for key, val in mytup:
    try:
        if dict[key] < val:
            dict[key] = val
    except IndexError:
        dict[key] = val
dict={}
对于键,mytup中的val:
尝试:
如果dict[key]
Itertools是您的朋友,一行解决方案:

from itertools import groupby
print [ max(g) for _, g in groupby(sorted(mytup), lambda x: x[0] )]
结果:

[('a', 6), ('b', 10), ('c', 8), ('d', 12)]

Itertools是您的朋友,一行解决方案:

from itertools import groupby
print [ max(g) for _, g in groupby(sorted(mytup), lambda x: x[0] )]
结果:

[('a', 6), ('b', 10), ('c', 8), ('d', 12)]

谢谢这是简单而优雅的。谢谢,谢谢。这是简单而优雅的。谢谢您不需要在排序的
中指定
键。没有它也能完美工作。:)<代码>排序
是一个
O(NlogN)
操作。@AshwiniChaudhary您的解决方法是将列表更改为dict,然后返回列表。还可以使用OrderedDict,即O(NLogN)。我的解决方案使用排序。OP将选择。。。两个选项中的任意一个:(感谢您的评论。@AshwinMukhija,感谢您的评论。更改和改进了答案。您不需要在
sorted
中指定
键。
sorted
在没有它的情况下工作得很好。:
sorted
是一个
O(NlogN)
operation.@AshwiniChaudhary您的解决方法是将list更改为dict,然后返回list。还可以使用OrderedDict,即O(NLogN)。我的解决方案使用排序。OP将选择。。。任何一个:(谢谢你的评论。@AshwinMukhija,谢谢你的评论。修改和改进了答案。