web-dev-qa-db-ja.com

Python辞書エントリをプッシュされた順序で保存する

Pythonディクショナリは特定の順序で保存されません(マッピングには順序がありません)。

>>> myDict = {'first':'uno','second':'dos','third':'tres'}
myDict = {'first':'uno','second':'dos','third':'tres'}
>>> myDict
myDict
{'second': 'dos', 'third': 'tres', 'first': 'uno'}

ソートされたリストまたはタプルを辞書から取得することは可能ですが、渡された順序でアイテムを辞書に格納することは可能でしょうか。前の例では、これは内部順序を{'first':'uno','second':'dos','third':'tres'}として持つことを意味します。違いはありません。

構成ファイルから値を読み取るときに辞書を使用して値を格納しているため、これが必要です。一度読み取って処理すると(値が変更されます)、読み取ったのと同じ順序で新しい構成ファイルに書き込む必要があります(この順序はアルファベットでも数値でもありません)。

何かご意見は?

順序を取得するための二次的な方法(リストなど)を探しているのではなく、辞書をそれ自体で順序付けする方法を探していることに注意してください(Pythonの今後のバージョンでそうなるため)。

17
Escualo

python 2.7以降、おそらく3.1、OrderedDictがあります

http://www.python.org/

http://python.org/download/releases/2.7/

>>> from collections import OrderedDict
>>> d = OrderedDict([('first', 1), ('second', 2),
...                  ('third', 3)])
>>> d.items()
[('first', 1), ('second', 2), ('third', 3)]

PEP 372:コレクションへの順序付き辞書の追加

31
YOU

リストを使用してキーの順序を保持する

4
Ofri Raviv

順序を維持する辞書の実装は確かに存在します。

これはDjangoにあります 、紛らわしいことにSortedDictと呼ばれ、Python> = 2.3iircで機能します。

3
Mauve

理論的な部分を説明するのではなく、簡単な例を示します。

>>> from collections import OrderedDict
>>> my_dictionary=OrderedDict()
>>> my_dictionary['foo']=3
>>> my_dictionar['aol']=1
>>> my_dictionary
OrderedDict([('foo', 3), ('aol', 1)])
2
Mohit Dabas

Pythonの辞書はハッシュテーブルとして実装されているため、順序はランダムに表示されます。並べ替える辞書の独自のバリエーションを実装することもできますが、便利な構文を失うことになります。代わりに、キーの順序も追跡します。

初期化:

keys = []
myDict = {}

読んでいる間:

myDict[key] = value
keys.append(key)

執筆中:

for key in keys:
  print key, myDict[key]
2
dmazzoni