【问题标题】:How to print unsorted dictionary in python?如何在python中打印未排序的字典?
【发布时间】:2010-05-28 11:52:12
【问题描述】:

我在 python 中有这个字典;

d={}
d['b']='beta'
d['g']='gamma'
d['a']='alpha'

当我打印字典时;

for k,v in d.items():
    print k

我明白了;

a
b
g

似乎 python 会自动对 dict 进行排序!我怎样才能得到原始的未排序列表?

加特

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    Dicts don't work like that:

    CPython 实现细节:键和值以非随机的任意顺序列出,因 Python 实现而异,并且取决于字典的插入和删除历史。

    您可以使用包含 2 元组的列表:

    d = [('b', 'beta'), ('g', 'gamma'), ('a', 'alpha')]
    

    Wayne's answer 中概述了类似但更好的解决方案。

    【讨论】:

      【解决方案2】:

      如前所述,dicts 不会对您放入的项目进行排序或排序。当您检索它时,它是如何排序的,这是“神奇的”。如果你想保持一个顺序 - 排序或不排序 - 你还需要绑定一个列表或元组。

      这将为您提供与保留顺序的列表相同的 dict 结果:

      greek = ['beta', 'gamma', 'alpha']
      d = {}
      for x in greek:
          d[x[0]] = x
      

      如果您不需要更改原始列表/顺序,只需将 [] 更改为 ()。

      【讨论】:

      • 我得到了排序结果。你用的是什么python
      • @Samuel,您的意思是您的字典以明显排序的顺序打印出来?因为这完全是“意外”——这完全取决于底层的 Python 实现。它可能会打印出与您输入相同的顺序,也可能不会。
      • @Wayne Werner,是的,我想要未分类的打印件。我需要从dict 构造一个YAML 文件。我总是得到排序后的内容。
      • @Samuel,您可能应该问一个问题 - 请确保它是 SSCCE
      【解决方案3】:

      不要使用字典。或者使用 Python 2.7/3.1 OrderedDict 类型。

      【讨论】:

        【解决方案4】:

        字典中没有顺序可言,没有原始的未排序列表

        【讨论】:

        • 正如 Marcelo Cantos 提到的,较新版本的 Python 提供了 OrderedDict,它保留了插入顺序。
        • @John:正如 OP 所说,他正在使用内置的 dict
        【解决方案5】:

        不,python 不会对 dict 进行排序,那样会太贵。 items() 的顺序是任意的。来自 python 文档:

        CPython 实现细节:键 和值列在任意 顺序是非随机的,变化的 跨 Python 实现,以及 取决于字典的历史 插入和删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-07
          • 2016-05-26
          • 1970-01-01
          • 2016-10-12
          • 2012-06-29
          • 1970-01-01
          • 1970-01-01
          • 2017-12-15
          相关资源
          最近更新 更多