2015-12-16 20 views
5

私はソートされた辞書を取得しようとしています。しかし、mydictorddictの間の項目の順序は変更されていないようです。Pythonのdictionaryとordereddictの違い

from collections import OrderedDict 

mydict = {'a':1,'b':2,'c':3,'d':4} 

orddict = OrderedDict(mydict) 

print(mydict,orddict) 

# print items in mydict: 
print('mydict') 
for k,v in mydict.items(): 
    print(k,v) 

print('ordereddict') 
# print items in ordered dictionary 
for k,v in orddict.items(): 
    print(k,v) 


# print the dictionary keys 
# for key in mydict.keys(): 
#  print(key) 


# print the dictionary values 
# for value in mydict.values(): 
#  print(value) 
+4

* dict *を作成すると、その注文は*保存されません。したがって、dictからOrderedDictを作成することは、* dict *が作成されたのと同じ順序で行われます。 – Maroun

答えて

9

OrderedDict注文要素が挿入された保存さ:だからOrderedDictはあなたのためではない要素を行い

>>> od = OrderedDict() 
>>> od['c'] = 1 
>>> od['b'] = 2 
>>> od['a'] = 3 
>>> od.items() 
[('c', 1), ('b', 2), ('a', 3)] 
>>> d = {} 
>>> d['c'] = 1 
>>> d['b'] = 2 
>>> d['a'] = 3 
>>> d.items() 
[('a', 3), ('c', 1), ('b', 2)] 

、それはあなたがそれを与える順序を保持します。

あなたは「並べ替え」の辞書にしたい場合、あなたはおそらく

>>> sorted(d.items()) 
[('a', 1), ('b', 2), ('c', 3)] 
+2

'dict'を' OrderedDict'に変換するには、(最初​​に)ソートされた順番でキーがあるとします。 'od = OrderedDict(sorted(d.items()))'。 – ShadowRanger

2

順序付き辞書をしたいだけで、通常の辞書のようなものですが、彼らは項目が挿入された順序を覚えています。順序付けされたディクショナリを反復処理する場合、アイテムはキーが最初に追加された順序で返されます。あなたは@ShadowRangerコメント

で述べたように、次の

orddict = OrderedDict(sorted(mydict.items(), key = lambda t: t[0]))

または単にキーでOrderedDict順序を構築することができ辞書

への添加順序によって

だから、唯一の種類

orddict = OrderedDict(sorted(d.items()))

あなたはOrderedDictは本当に素晴らしいです、ブライアンの答えへの追加8.3.5.1. OrderedDict Examples and Recipes

2

で、値によって

orddict = OrderedDict(sorted(mydict.items(), key = lambda t: t[1]))

詳しい情報を注文したい場合。それはcollections.counterのような他のMappingオブジェクトとの等価性のテストをサポートしているので、あなたは、単純なdictオブジェクトとして使用することができます

  • :なぜここにあります。

  • OrderedDictは、Brianの説明に従って挿入順序を保持します。これに加えて、LIFOの順序で(キー、値)のペアを返すメソッドpopitemがあります。したがって、マップされた「スタック」として使用することもできます。

dictのすべての機能だけでなく、いくつかのクールなトリックを得ることができます。