繁体   English   中英

用Python保持字典参数顺序的方式是什么?

[英]What's the way to keep the dictionary parameter order in Python?

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中保持字典参数的顺序?

我需要保持参数的顺序,我的意思是,属性是第一个,然后是标签,直到最后得到reouteDelay。

然后,您只是在以错误的顺序执行操作-不需要有序的词典! 相反,尝试对cache进行成对的元组,如下所示:

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版本完全相同的语义,以及所需的保持所需顺序的属性,并且性能至少是一样的。 通过专注于“保持字典有序”,您将专注于错误的问题(as,在大多数情况下,人们都喜欢“有序词典”!-)。

常规字典不会做,您必须使用有序字典。 查看以下链接:

  1. PEP 372:将有序词典添加到集合中
  2. 在Python中使用有序的dict作为对象字典 -一个SO问题来证明人们正在使用PEP 372的命令:-)
  3. Nicola Larosa和Michael Foord的&书模块

如果您想在Google周围搜索更多内容,请尝试使用搜索词“ python排序的字典”。 我记得在SO上看到过许多与命令字典相关的有序问题,因此,如果由于某些原因上述链接不足,也许您可​​以在其他问题中找到更好的解决方案。

更新:实际上,Mark建议使用元组列表可能是非常好的,但是命名元组可能更方便: docs中的相关片段 另外,如果您打算对数据进行一些序列化/反序列化,并且想真正快速地进行 ,请查看Google的协议缓冲区 (提供Python工具)。

字典不保留键的顺序。 您可以使用元组列表代替字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM