如何使用排序的键列表对OrderedDict进行排序?

kir*_*iri 9 python sorting

假设我有一个collections.OrderedDict对象和一个重新排列的键列表:

ordereddict = collections.OrderedDict((
    ('key_78', 'value'),
    ('key_40', 'value'),
    ('key_96', 'value'),
    ('key_53', 'value'),
    ('key_04', 'value'),
    ('key_89', 'value'),
    ('key_52', 'value'),
    ('key_86', 'value'),
    ('key_16', 'value'),
    ('key_63', 'value'),
))

# Example only; actual list will **not** == sorted(ordereddict)
key_list = ['key_04', 'key_16', 'key_40', 'key_52', 'key_53', 'key_63', 'key_78', 'key_86', 'key_89', 'key_96']
Run Code Online (Sandbox Code Playgroud)

我怎样才能OrderedDict对它进行排序,使其按照与key_list?相同的方式进行排序?

mgi*_*son 11

只需创建一个新的OrderedDict:

newdct = OrderedDict((key, olddct[key]) for key in sortedlist)
Run Code Online (Sandbox Code Playgroud)

如果你真的需要这样的事情发生在地方,你可以清除olddct,并与新的更新:

olddct.clear()
olddct.update(newdct)
Run Code Online (Sandbox Code Playgroud)


kir*_*iri 5

使用以下内容:

def sort_by_list(dict_, list_):
    for key in list_:
        dict_.move_to_end(key)

sort_by_list(ordereddict, key_list)
Run Code Online (Sandbox Code Playgroud)

仅当list_包含dict中的所有键以及在Python 3.2或更高版本上时,此方法才有效。