目标:创建一个新的OrderedDict实例的键,使指定顺序列表中的键首先出现。如果OrderedDict中没有顺序列表中的一些键,请忽略它们。
此外,重新排序应该是“稳定的”,也就是说,如果没有在order list中指定一些键,那么它们应该从旧的OrderedDict中保留原来的顺序。
换言之:
o = OrderedDict([('a',1), ('b',2), ('d', 5), ('c',3), ('f', 6)])
reorder_ordereddict(o, ['c', 'a', 'x'])生产:
OrderedDict([('c', 3), ('a', 1), ('b', 2), ('d', 5), ('f', 6)])代码:
def reorder_ordereddict(od, new_key_order):
odkeys = od.keys()
fullorder = [x for x in new_key_order if x in odkeys]
remaining = [x for x in odkeys if not x in fullorder]
fullorder.extend(remaining)
newod = OrderedDict([(k,None) for k in fullorder])
newod.update(od)
return newod有什么更好的办法吗?
发布于 2015-04-08 19:18:38
您可以将其简化为:
def reorder_ordereddict(od, new_key_order):
new_od = OrderedDict([(k, None) for k in new_key_order if k in od])
new_od.update(od)
return new_od第一行建立所需的键顺序,注意不要引入不存在的键。
第二行处理剩下的部分。当update()遍历od的键时,没有显式提到的现有键应该以正确的顺序出现。
https://codereview.stackexchange.com/questions/86294
复制相似问题