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

9 投票
2 回答
6032 浏览
提问于 2025-04-18 06:09

假设我有一个 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 个回答

11

只需要创建一个新的有序字典(OrderedDict)就可以了:

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

如果你真的需要在原地进行这个操作,也就是说不想创建新的字典,而是想直接修改原来的字典,你可以先清空旧的字典,然后用新的内容更新它:

olddct.clear()
olddct.update(newdct)
6

使用下面的代码:

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

sort_by_list(ordereddict, key_list)

这个方法只有在 list_ 里包含字典中的所有键时才能正常工作,并且需要在 Python 3.2 或更高版本中使用。

撰写回答