假设我有一个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)
使用以下内容:
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或更高版本上时,此方法才有效。