2016-11-14 87 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

排序,groupbymax

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)'。秒 –

+0

@AlexHall修复 –

相关问题