私は例の値の最大値を見つける必要がある:最大値の検索方法は?
[(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でこれを達成することができますか?
何か提案があります。ヘルプありがとう
私は例の値の最大値を見つける必要がある:最大値の検索方法は?
[(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でこれを達成することができますか?
何か提案があります。ヘルプありがとう
:
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
並べ替え、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...], ... ]
これは誤った結果をもたらします。あなたは 'groupby'にキーを追加する必要があります。デフォルトのキーはIDなので、すべてのグループがすべて0であるため、すべてのグループに0の要素があります。 –
あなたが正しいと思う、私は 'itemgetter(0)'にデフォルト設定されていると思った。 Sec –
@AlexHall fixed –
あなたはこれまでに試してみましたか?あなたは問題を解決するために何を試みましたか? – Li357