【问题标题】:What's the way to keep the dictionary parameter order in Python?在Python中保持字典参数顺序的方法是什么?
【发布时间】:2010-02-20 15:32:53
【问题描述】:

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中保持字典参数顺序的方法是什么?

【问题讨论】:

  • 字母顺序还是广告顺序?
  • 模组可以强制选择答案吗?
  • 5 个问题,可能没有一个问题得到正确回答。放松人们...
  • @Mark :我将一些答案设置为已接受,但数字没有增加。或者可能会有时间延迟。
  • @Skurmedel :我认为有时这是必要的,尤其是对于 SO 的新手。

标签: python parameter-passing


【解决方案1】:

我需要保持顺序 参数,我的意思是,属性来了 首先,然后标记,直到我得到 路由延迟最后。

那么您只是按错误的顺序做事——不需要有序的字典!尝试使用 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 版本具有完全相同的语义,加上保持您希望的顺序的所需属性,并且性能至少一样好。通过专注于“保持字典有序”,您将注意力集中在错误的问题上(唉,对于大多数人们使用“有序字典”的情况!-)。

【讨论】:

    【解决方案2】:

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

    1. PEP 372: Adding an ordered dictionary to collections
    2. Using an ordered dict as object dictionary in python - 一个证明人们正在使用 PEP 372 的 odict 的 SO 问题 :-)
    3. Nicola Larosa & Michael Foord's odict module

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-01
        • 2021-08-19
        • 2015-08-05
        • 2021-06-23
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多