2016-11-14 3 views
-2

мне нужно найти макс значений, например:Как найти максимальные значения?

[(12, 0.95), (15, 0.92), (20, 0.90), (12, 0.88), (15, 0.98), (12, 0.89)] 

выход будет максимальное значение соответствует с ID:

[(12, 0.95), (15, 0.98), (20, 0.90)] 

Как я могу добиться этого в Python?

Любые предложения! Спасибо за помощь

+3

Что вы пробовали до сих пор? Какие попытки вы предприняли для решения проблемы? – Li357

ответ

3

Использование только основы :

data = [(12, 0.95), (15, 0.92), (20, 0.90), (12, 0.88), (15, 0.98), (12, 0.89)] 

result_dict = {} 
for id_num, value in data: 
    result_dict[id_num] = max(value, result_dict.get(id_num, value)) 

result = sorted(result_dict.items()) 

print(result) 

Если часть внутри цикла сбивает с толку, здесь и другие способы, чтобы написать это:

if id_num in result_dict: 
    result_dict[id_num] = max(result_dict[id_num], value) 
else: 
    result_dict[id_num] = value 

или

if id_num in result_dict: 
    if value > result_dict[id_num]: 
     result_dict[id_num] = value 
else: 
    result_dict[id_num] = value 

или

if id_num not in result_dict or value > result_dict[id_num]: 
    result_dict[id_num] = value 

или

if id_num > result_dict.get(id_num, value): 
    result_dict[id_num] = value 
2

Сортировка, groupby, и max!

import itertools 
import operator 

data = [(12, 0.95), (15, 0.92), (20, 0.90), (12, 0.88), (15, 0.98), (12, 0.89)] 
sorted_data = sorted(data) 
groups = itertools.groupby(sorted_data, key=operator.itemgetter(0)) 
result = [max(group) for _, group in groups] 

itertools.groupby занимает отсортированный список элементов, группирует их по какой-то ключевой функции (в данном случае мы используем operator.itemgetter(0)), и дает итератор формы:

[(keyfunc_result, [list_of_results...], ... ] 
+2

Это дает неверный результат, вам нужно добавить ключ к 'groupby'. Ключ по умолчанию - это идентификатор, поэтому все группы имеют 0 элементов, потому что все они разные. –

+0

Стреляйте, что вы правы, я думал, что это по умолчанию 'itemgetter (0)'. Sec –

+0

@AlexHall fixed –

Смежные вопросы