11

次の項目を含む Ordered Dict があるとします。

mydict = {'Rust': {'definition':'rusts definition'}, 'Iron': {'definition:'iron definition'}, 'Pyrite': {'definition':'pyrite definition'}}

配列がある場合:

myorder = ['Pyrite', 'Rust', 'Iron']

mydict の項目が myorder に基づいて順序付けられるように、Ordered Dict を並べ替えるにはどうすればよいですか?

4

2 に答える 2

14

これを試して:

mydict = {'Rust': {'definition':'rusts definition'},
          'Iron': {'definition':'iron definition'},
          'Pyrite': {'definition':'pyrite definition'}}

myorder = ['Pyrite', 'Rust', 'Iron']

from collections import OrderedDict

ordered = OrderedDict()
for k in myorder:
    ordered[k] = mydict[k]

またはさらに短い:

ordered = OrderedDict((k, mydict[k]) for k in myorder)

上記のスニペットを使用するorderedと、 と同じキー/値が含まれmydictますが、 で指定された順序で挿入されmyorderます。これが の利点ですOrderedDict。繰り返し処理を行うと、挿入順序が保持されます。

既存の辞書をその場でソートする方法はありません (すべてのキーと値のペア抽出し、それらを削除して、正しい順序で再度追加することはできますが、それは考えではありませんよね?)、作成する必要があります。新しいもの ... または、指定された順序で既存の辞書を単純に反復処理します。

for k in myorder:
    x = mydict[k] # do something with x
于 2013-08-23T14:42:05.500 に答える