2012-04-10 20 views
2

私はPythonの普通の辞書を持っています。この場合、挿入順序は保持されません。要素を挿入する順序で保持する必要があります。私はOrderedDictがこの仕事をすることができることを知っています。しかし、私の問題は、私は既に存在する普通の辞書から順序付けられた辞書を得る必要があるということです。この辞書は変更できません。以下は私の普通の辞書です:Python普通辞書から順番に辞書への変換

d = {'tag': {'a': 1, 'c': {'k': 8}, 'b': 7, 'n': 6}} 

すでに存在する辞書の要素の順序を保つ方法はありますか?どんな助けもありがとうございます。 Pythonを使用する2.7

+0

私はそれを取得しません。既存の辞書をどのような順序でご希望ですか?アイテムをどの順序で配置しても、その順序はすでに失われています。 –

+2

普通の辞書が注文を保存していた場合、注文辞書はなぜ存在するのですか? – Blender

+0

これは不可能なので、あなたがなぜこれを行う必要があると思うかを説明することができれば、私たちはまだ助けてくれるでしょうか? –

答えて

7

短い答え:これは不可能です。辞書を作成したら、それは順序がありません。

アイテムは、そのハッシュとない彼らの挿入順序に従って、あなたはアイテムが挿入されているとして、それが挿入順序を記録することができますので、OrderedDictは、開始時に作成されている必要があり保存されます。

0

オケイは理論的にはできません。

しかし、単に笑いのために...

あなた自身がシェル出力を見て、(他にどのようにあなた自身が順序を知っているだろうので、私はそうと仮定している?)だからここに私達は行く順番を考え出すされているので。

import re 

d = {'tag': {'a': 1, 'b': 7, 'c': {'k': 8}, 'n': 6}} 
tags = d['tag'] 
sorted_keys = set(re.findall(r"'(\w)':", str(tags))).intersection(tags.keys()) 

print sorted_keys # You can form your OrderedDict