如何使用排序后的键列表对OrderedDict排序?
假设我有一个 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 或更高版本中使用。