首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重排OrderedDict

重排OrderedDict
EN

Code Review用户
提问于 2015-04-08 18:57:32
回答 1查看 1K关注 0票数 1

目标:创建一个新的OrderedDict实例的键,使指定顺序列表中的键首先出现。如果OrderedDict中没有顺序列表中的一些键,请忽略它们。

此外,重新排序应该是“稳定的”,也就是说,如果没有在order list中指定一些键,那么它们应该从旧的OrderedDict中保留原来的顺序。

换言之:

代码语言:javascript
复制
o = OrderedDict([('a',1), ('b',2), ('d', 5), ('c',3), ('f', 6)])
reorder_ordereddict(o, ['c', 'a', 'x'])

生产:

代码语言:javascript
复制
OrderedDict([('c', 3), ('a', 1), ('b', 2), ('d', 5), ('f', 6)])

代码:

代码语言:javascript
复制
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

有什么更好的办法吗?

EN

回答 1

Code Review用户

回答已采纳

发布于 2015-04-08 19:18:38

您可以将其简化为:

代码语言:javascript
复制
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的键时,没有显式提到的现有键应该以正确的顺序出现。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/86294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档