首页 文章

在Python中保持字典参数顺序的方法是什么?

提问于
浏览
1
def createNode(doc_, **param_):
    cache = {'p':'property','l':'label','td':'totalDelay','rd':'routeDelay','ld':'logicDelay'}
    for index in param_:
        newIndex = cache[index]
        value = param_[index]
        print newIndex, '=', value 

 doc = 10 
createNode(doc, p='path', l='ifft4k_radix4_noUnolling_core.vi', td='3.0', ld='1.0', rd='2.0')

在Python 2.6上运行此代码给我以下结果 .

routeDelay = 2.0
property = path
totalDelay = 3.0
logicDelay = 1.0
label = ifft4k_radix4_noUnolling_core.vi

我需要保持参数的顺序,我的意思是, property 首先出现,然后是 label ,直到最后得到 routeDelay .

问:在Python中保持字典参数顺序的方法是什么?

3 回答

  • 6

    我需要保持参数的顺序,我的意思是,属性首先出现,然后标记,直到我最后获得reouteDelay .

    然后你只是按错误的顺序做事 - 不需要有序的词典!相反,请尝试使用缓存对的元组,如下所示:

    def createNode(doc_, **param_):
        cache = ( ('p', 'property'), , ('l', 'label'), ('td', 'totalDelay'),
                  ('rd', 'routeDelay'), ('ld', 'logicDelay') )
        for index, newIndex in cache:
            if index not in param_:
                continue
            value = param_[index]
            print newIndex, '=', value
    

    这与您的 createNode 版本具有完全相同的语义,加上维护所需顺序的所需属性,性能至少同样出色 . 通过专注于"keeping the dictionary ordered",你专注于错误的问题(就像在大多数情况下人们伸手去拿_1732692一样的情况一样!) .

  • 3

    常规字典不会,您将不得不使用有序字典 . 看看这些链接:

    如果你想谷歌更多,请尝试使用搜索词“python ordered dictionary” . 我记得在这里看过一些有序的字典相关问题,所以如果由于某些原因上述链接不合适,也许你可以在其他问题上找到更好的东西 .

    更新:马克建议使用元组列表可能非常好,实际上,但命名元组可能更方便:a relevant fragment in the docs . 此外,如果您计划对数据进行一些序列化/反序列化并希望快速完成,请查看Google的protocol buffers(Python工具可用) .

  • 7

    字典不保留键的顺序 . 您可以使用元组列表而不是字典 .

相关问题