获得具有最大第二值的所有元组

时间:2017-12-05 00:02:32

标签: python list sorting tuples

如何修复元组列表中的出现次数并返回具有最大值的项目。

        given = [('a',2),('b',3),('c',5),('a',3),('c',5)]

        expected = [('c',5),('a',3),('b',3)]

如果不做任何复杂的事情,你如何做到这一点。

4 个答案:

答案 0 :(得分:2)

from itertools import groupby
groups = groupby(sorted(given, key = lambda x: x[0]), key = lambda x: x[0])
print [max(g) for k,g in groups]

结果

[('a', 3), ('b', 3), ('c', 5)]

答案 1 :(得分:1)

这是一种方式:

given = [('a',2),('b',3),('c',5),('a',3),('c',5)]
expected = dict(sorted(given)).items()

解释

sorted(...)

对列表进行排序时,所有具有较低值的项目(第二个元素)都将移动到列表的前面。

dict(...)

当您将已排序的列表转换为dict时,较低的值将被更接近列表末尾的较高值替换。

答案 2 :(得分:1)

一种非常简单的方法是将元组分组到字典中,然后从字典中的每个[scipy.spatial.distance.euclidean(df1.iloc[:,:3].values[i], df2.reindex(df1.key).values[i]) for i in range(len(df1))] Out[440]: [1.882090741219987, 2.9970046421720804, 1.7279094194170017, 4.245182958491777, 2.0653635497011176, 2.47293664565694, 1.2723181192492703, 3.0170858093764914, 3.341996363028691, 0.9953100819267331] 键中获取最大(letter, number)值:

letter

不使用外部库:

from collections import defaultdict
from operator import itemgetter

given = [('a',2),('b',3),('c',5),('a',3),('c',5)]

d = defaultdict(list)
for key, value in given:
    d[key].append((key, value))

>>> print(dict(d))
{'b': [('b', 3)], 'a': [('a', 2), ('a', 3)], 'c': [('c', 5), ('c', 5)]}

>>> print([max(x[1], key = itemgetter(1)) for x in sorted(d.items())])
[('a', 3), ('b', 3), ('c', 5)]

答案 3 :(得分:-1)

        given = [('a',2),('b',3),('c',5),('a',3),('c',5)]
        expected = dict(given).items()
        dict_items([('a', 3), ('b', 3), ('c', 5)])