如何根据数组重新排序python有序的dict?

Rol*_*ndo 7 python

假设我有一个Ordered Dict,其中包含以下项目:

mydict = {'Rust': {'definition':'rusts definition'}, 'Iron': {'definition:'iron definition'}, 'Pyrite': {'definition':'pyrite definition'}}
Run Code Online (Sandbox Code Playgroud)

如果我有一个数组:

myorder = ['Pyrite', 'Rust', 'Iron']
Run Code Online (Sandbox Code Playgroud)

如何重新排序有序字典,以便根据myorder对mydict中的项目进行排序?

Ósc*_*pez 12

试试这个:

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]
Run Code Online (Sandbox Code Playgroud)

甚至更短:

ordered = OrderedDict((k, mydict[k]) for k in myorder)
Run Code Online (Sandbox Code Playgroud)

使用上面的代码片段,ordered将包含mydict与之相同的键/值,但它们将按照指定的相同顺序插入myorder.这样做的好处是OrderedDict:当迭代它时,它将保留插入顺序.

没有办法对现有的字典进行排序(好吧,你可以提取所有的键值对,消除它们并按正确的顺序再次添加它们,但这不是主意,是吗?),有必要创建一个新的...或者只是按指定的顺序迭代现有的字典:

for k in myorder:
    x = mydict[k] # do something with x
Run Code Online (Sandbox Code Playgroud)