2017-09-11 21 views
-5
input={11: {'perc': 0, 'name': u'B test', 'cid': 11, 'total': 0, 'pending': 0, 'complete': 0}, 10: {'perc': 0, 'name': u'C test', 'cid': 10, 'total': 0, 'pending': 0,'complete': 0}, 3: {'perc': 9, 'name': u'Atest Pre-requisites', 'cid': 3, 'total': 11, 'pending': 10, 'complete': 1}} 

名前欄に基づいてこの辞書を並べ替える必要があります。私はPythonで新しいです、誰も助けてください。Python sort多次元辞書

+0

何あなたはこれまでに試してみましたか? –

+0

がありますが、辞書には独自のソート順があります。期待した結果は何ですか? –

+0

ソート(mydict.iteritems()、key = lambda(k、v):(v、k)): これはキー値dictをソートします。 –

答えて

0

まず、予約語(inputなど)を変数として使用しないようにしてください(今はinputが再定義され、関数input()は呼び出されません)。

また、辞書はソートできません。キーが不要な場合は、辞書をリストに変換して並べ替えることができます。あなたが鍵を維持し、あなたがコメントで言ったようにiteritems()を使用して、代わりにこのコードを使用したい場合は

input_dict = {11: {'perc': 0, 'name': u'B test', 'cid': 11, 'total': 0, 'pending': 0, 'complete': 0}, 10: {'perc': 0, 'name': u'C test', 'cid': 10, 'total': 0, 'pending': 0,'complete': 0}, 3: {'perc': 9, 'name': u'Atest Pre-requisites', 'cid': 3, 'total': 11, 'pending': 10, 'complete': 1}} 
input_list = sorted(input_dict.values(), key=lambda x: x['name']) 
print(input_list) 
# prints [{'perc': 9, 'complete': 1, 'cid': 3, 'total': 11, 'pending': 10, 'name': u'Atest Pre-requisites'}, {'perc': 0, 'complete': 0, 'cid': 11, 'total': 0, 'pending': 0, 'name': u'B test'}, {'perc': 0, 'complete': 0, 'cid': 10, 'total': 0, 'pending': 0, 'name': u'C test'}] 

EDIT

:コードは次のようになります

input_dict = {11: {'perc': 0, 'name': u'B test', 'cid': 11, 'total': 0, 'pending': 0, 'complete': 0}, 10: {'perc': 0, 'name': u'C test', 'cid': 10, 'total': 0, 'pending': 0,'complete': 0}, 3: {'perc': 9, 'name': u'Atest Pre-requisites', 'cid': 3, 'total': 11, 'pending': 10, 'complete': 1}} 
input_list = sorted(input_dict.iteritems(), key=lambda x: x[1]['name']) 
print(input_list) 
# prints [(3, {'perc': 9, 'complete': 1, 'cid': 3, 'total': 11, 'pending': 10, 'name': u'Atest Pre-requisites'}), (11, {'perc': 0, 'complete': 0, 'cid': 11, 'total': 0, 'pending': 0, 'name': u'B test'}), (10, {'perc': 0, 'complete': 0, 'cid': 10, 'total': 0, 'pending': 0, 'name': u'C test'})] 
+0

お返事ありがとうございます。キーで表示する方法はありますか?この出力にはキーはありません。 –

+0

ちょうど私の答えにそれを追加! –

+0

私は試しましたが、出力が表示されませんでした。 –

関連する問題