2013-12-13 15 views
22

サブキーkey3の値に基づいてこの辞書dを降順で並べ替える必要があります。以下を参照してください。値に基づいて降順で並べ替えるpython辞書

d = { '123': { 'key1': 3, 'key2': 11, 'key3': 3 }, 
     '124': { 'key1': 6, 'key2': 56, 'key3': 6 }, 
     '125': { 'key1': 7, 'key2': 44, 'key3': 9 }, 
    } 

最終的な辞書は次のようになります。

d = { '125': { 'key1': 7, 'key2': 44, 'key3': 9 }, 
     '124': { 'key1': 6, 'key2': 56, 'key3': 6 }, 
     '123': { 'key1': 3, 'key2': 11, 'key3': 3 }, 
    } 

私のアプローチは、そのキーKEY3の値となり、その後、使用逆転D、(ソート(e)参照)から別の辞書の電子を形成するためだったが、KEY3の値が同じであることができるので、その辞書eはのいくつかを失いましたキーとその値理にかなっている?

どうすれば実現できますか?これはテスト済みのコードではありません。私はその論理を理解しようとしているだけです。

+1

なりますdesendingされます。ほとんどのキー/値マッピングのデータ型は次のとおりです。 abarnertまたはohn Zwinckの回答を受け入れてください。 –

答えて

36

Dictionaries do not have any inherent order。または、むしろ、それらの固有の順序は「任意ですがランダムではありません」ので、それはあなたに何の役にも立たないのです。

異なる語では、dとあなたのeはまったく同じ辞書になります。あなたがここに何ができるか

OrderedDictを使用することです:

from collections import OrderedDict 
d = { '123': { 'key1': 3, 'key2': 11, 'key3': 3 }, 
     '124': { 'key1': 6, 'key2': 56, 'key3': 6 }, 
     '125': { 'key1': 7, 'key2': 44, 'key3': 9 }, 
    } 
d_ascending = OrderedDict(sorted(d.items(), key=lambda kv: kv[1]['key3'])) 
d_descending = OrderedDict(sorted(d.items(), 
            key=lambda kv: kv[1]['key3'], reverse=True)) 

dは、いくつかの任意の順序を持​​っています。 d_ascendingと思っています。オリジナルではdでしたが、そうはしませんでした。 d_ascendingには、ご希望の注文があります。eあなたが本当に辞書としてeを使用する必要がない場合


は、あなただけの特定の順序でdの要素を反復処理することができるようにしたい、あなたはこれを簡素化することができます:

for key, value in sorted(d.items(), key=lambda kv: kv[1]['key3'], reverse=True): 
    do_something_with(key, value) 

OrderedDictの代わりに、ソートされた順序で辞書を変更したい場合は、何らかのソート済み辞書が必要です。 PyPIにはいくつかのオプションがあり、いくつかはツリーの上に実装されているもの、OrderedDictは必要に応じて再ソートするものなどがあります。

4

Pythonディクテーションはソートされていません。 1つをソートすることも、要素の挿入順に要素の順序を制御することもできません。あなたはコレクションを見たいかもしれません。でもほぼ正確にはほとんどのチュートリアルが付属していますOrderDictは、あなたが何をしようとして:http://docs.python.org/2/library/collections.html#ordereddict-examples-and-recipes

4

あなたが降順と辞書に格納する際にソートするために以下のコードを利用することができます:

 listname = [] 
     for key, value in sorted(dictionaryName.iteritems(), key=lambda (k,v): (v,k),reverse=True): 
      diction= {"value":value, "key":key} 
      listname.append(diction) 
2

一覧

dict = {'Neetu':22,'Shiny':21,'Poonam':23} 
print sorted(dict.items()) 
sv = sorted(dict.values()) 
print sv 

辞書

d = [] 
l = len(sv) 
while l != 0 : 
    d.append(sv[l - 1]) 
    l = l - 1 
print d` 
17

短い試験辞書をソートするPLEは順番

a1 = {'a':1, 'b':13, 'd':4, 'c':2, 'e':30} 
a1_sorted_keys = sorted(a1, key=a1.get, reverse=True) 
for r in a1_sorted_keys: 
    print r, a1[r] 

後は、ほぼすべての言語での `` dict``(複数可)、本質的に定義によって並べ替えられていないことを覚えて、今後の参考のために出力

e 30 
b 13 
d 4 
c 2 
a 1