2017-03-31 14 views
0

リストの辞書からすべての最大値を返そうとしています。リストの辞書の複数の最大値を見つける

my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 7]} 

maxima = max(my_dict.items(), key=operator.itemgetter(1))[0] 

「111」と「122」の両方ではなく、「122」が返されます。両方のキーを返すようにこれを変更するにはどうすればよいですか?

+0

をこれが答えではないが、リスト、タプルなどが辞書編集で比較されます**。 –

答えて

1

私は多分これがあなたが望むものだと思いますか?これはまた、my_dictの各キーの最大値を追跡します。

maxima = {} 
my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 7]} 

for key in my_dict: 
    maxima[key] = max(my_dict[key]) 

max_keys = [key for key in maxima if maxima[key] == max(maxima.values())] 
print max_keys 
0

あなたが行うことができ、リスト内の項目の最大に応じて、あなたのリストをソートするに:

print(sorted(my_dict.keys(),key=lambda x: max(my_dict[x]))) 

あなたは[144, 133, 122, 111]を得るが、それは、キーがそれに関連付けられた中で最高値を担持しているあなたを教えてくれないだろうリスト。

ですから、2つのステップでそれを実行する必要があります。リストにあるすべての値の

  • 計算最大値
  • は、例えば次のようにこの値

を含むリストを一致するキーを抽出します:

my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 7]} 

max_value = max(x for l in my_dict.values() for x in l) # flat max of values 

または最大値を計算する場合はフィルターを辞書から抽出し、次いで

max_value = max(l[0] for l in my_dict.values()) 

print([k for k,v in my_dict.items() if max_value in v]) # keys whose value contain the max 

結果:その位置、例えば、最初のものを与えられたr値

[122, 111] 
+0

はい、うまくいきます、ありがとうございます。私は誤った辞書を持っていることに気付きました。私は、リストの最初の値に焦点を当てようとしています。上記の場合、何も> 50なので、問題はありません。リストの特定の価値に焦点を当てる方法を学ぶ方向で私を指摘できますか? – Detterman

+0

それはそう簡単です。私の編集をチェックしてください。 –

+0

ありがとう、もう一度。私はあなたと同じようにこれを学ぶために私が使用できるリソースを知っていますか?それはまだ私の頭の上に少しです。これは私のプロトタイプを作成する必要がある私のコードの最後のステップであり、私はしばらく詰まっています。 – Detterman

関連する問題