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

时间:2014-05-10 22:57:06

标签: 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']

如何对OrderedDict进行排序,使其按照与key_list相同的方式进行排序?

2 个答案:

答案 0 :(得分:10)

只需创建一个新的OrderedDict:

newdct = OrderedDict((key, olddct[key]) for key in sortedlist)

如果你真的需要到位,你可以清除olddct并用新的更新它:

olddct.clear()
olddct.update(newdct)

答案 1 :(得分:3)

使用以下内容:

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

sort_by_list(ordereddict, key_list)

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