2

すべてのキーがリストを値として保持している辞書があります。各リストには、内部に 2 つの項目、1 つの整数、1 つの文字列を持つ 1 つ以上のタプルがあります。

例:

my_dict = {'dict_key_1': [(100, 'string_x1234'), (95, 'string_rtx3') ..],
           'dict_key_2': [(26, 'string_abc3'), (321, 'string_432fd'), ...],
           'dict_key_3': [(32, 'string_232df']}

私はこの辞書を反復処理していますが、リスト内の項目を処理しています。

ただし、両方の反復で、リスト内のタプルの最初の項目の最大値でソートされた辞書が必要です。

その場合、321が最高であるため、最初にdict_key_2を取得し、その項目は、最初の項目が321であるタプルから始まり、次に26というようにリストされます。

2回目の反復(タプルのリストのソート)で問題ありません:

sorted(data[k], reverse = True)

しかし、私は現在、その辞書のキーが保持しているリスト内の任意のタプルの最大値に応じてメイン辞書をソートすることに失敗しています。私は現在持っています:

for k in sorted(data, key=lambda k: sorted(data[k])[0][0]):

しかし、それは機能していません。しかしsorted(data[k])[0][0])、反復中に印刷しようとすると、実際には、そのリスト内のすべてのタプルの最初の値で順序付けされた後、最初のタプル [0] の最初の値 [0] が得られます ( data[k])

私は何を間違っていますか?この辞書を必要に応じてソートするにはどうすればよいですか?

ありがとうございました。

4

3 に答える 3

2

dict のリストを並べ替えても構わない場合は、2 つのパスでこれを行うことをお勧めします。

for L in my_dict.itervalues():
  L.sort(reverse=True)

import collections
my_sorted_dict = collections.OrderedDict((k, my_dict[k]) for k in sorted(my_dict, key=my_dict.get, reverse=True))
于 2012-10-22T01:32:43.400 に答える
1

次のスニペットは、新しいソート済み辞書を提供します。

from collections import OrderedDict

my_dict = {'dict_key_1': [(100, 'string_x1234'), (95, 'string_rtx3')],
           'dict_key_2': [(26, 'string_abc3'), (321, 'string_432fd')],
           'dict_key_3': [(32, 'string_232df')]}

sorted_my_dict = OrderedDict(sorted(my_dict.iteritems(),
                                    key=lambda (k, v): max(v),
                                    reverse=True))
于 2012-10-22T01:46:56.750 に答える
1

使用max:

for k in sorted(data, key=lambda k: max(data[k]), reverse=True):
于 2012-10-22T01:27:32.937 に答える