如何修复元组列表中的出现次数并返回具有最大值的项目。
given = [('a',2),('b',3),('c',5),('a',3),('c',5)]
expected = [('c',5),('a',3),('b',3)]
如果不做任何复杂的事情,你如何做到这一点。
答案 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)])