1

def createNode(doc_, **param_):
    缓存 = {'p':'property','l':'label','td':'totalDelay','rd':'routeDelay','ld':'logicDelay'}
    对于 param_ 中的索引:
        newIndex = 缓存[索引]
        值 = 参数_[索引]
        打印新索引,'=',值

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

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

路由延迟 = 2.0
属性 = 路径
总延迟 = 3.0
逻辑延迟 = 1.0
标签 = ifft4k_radix4_noUnolling_core.vi

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

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

4

3 回答 3

7

我需要保持参数的顺序,我的意思是,属性在前,然后是标签,直到最后得到 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,加上保持您希望的顺序的所需属性,并且性能至少一样好。通过专注于“保持字典有序”,您将注意力集中在错误的问题上(唉,在大多数情况下,人们会使用“有序字典”!-)。

于 2010-02-20T16:13:37.140 回答
6

普通字典不行,你必须使用有序字典。查看这些链接:

  1. PEP 372:向集合添加有序字典
  2. 在python中使用有序字典作为对象字典——一个证明人们正在使用PEP 372的字典的SO问题:-)
  3. Nicola Larosa 和 Michael Foord 的 odict 模块

如果您想在 Google 周围搜索更多信息,请尝试搜索词“python 有序字典”。我记得在 SO 上看到了一些与 dict 相关的有序问题,所以如果上述链接由于某种原因不合适,也许你可以在其他问题中找到更好的东西。

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

于 2010-02-20T15:40:39.283 回答
3

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

于 2010-02-20T15:35:23.177 回答