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

时间:2013-06-13 16:20:55

标签: 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)]

3 个答案:

答案 0 :(得分:2)

把它变成字典:

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

答案 1 :(得分:1)

我认为这应该有效:

dict = {}
for key, val in mytup:
    try:
        if dict[key] < val:
            dict[key] = val
    except IndexError:
        dict[key] = val

答案 2 :(得分:0)

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)]