11

假设我有一个包含以下项目的有序字典:

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

如果我有一个数组:

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

如何重新排序 Ordered Dict 以便 mydict 中的项目根据 myorder 进行排序?

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 回答
-2

例如,如果您想按该顺序使用它们,您可以这样做。

for key in myorder:
    value = mydict[key]
    print value

输出:

{'definition': 'pyrite definition'}
{'definition': 'rusts definition'}
{'definition': 'iron definiti
于 2013-08-23T14:43:54.900 回答