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'にキーを追加する必要があります。デフォルトのキーはIDなので、すべてのグループがすべて0であるため、すべてのグループに0の要素があります。 –

+0

あなたが正しいと思う、私は 'itemgetter(0)'にデフォルト設定されていると思った。 Sec –

+0

@AlexHall fixed –

関連する問題