【问题标题】:How to print dictionary's values from left to right?如何从左到右打印字典的值?
【发布时间】:2012-05-27 08:33:21
【问题描述】:

我有一本字典:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"}

当我尝试打印它的值时,它们是从右到左打印的:

>>> for item in a.values():
    print item,


edc qaz wer

我希望它们从左到右打印:

wer qaz edc

我该怎么做?

【问题讨论】:

标签: python printing dictionary


【解决方案1】:

你不能。字典没有任何可以使用的顺序,因此对于字典文字没有“从左到右”的概念。决定排序并坚持下去。

【讨论】:

  • @alwbtc 这是一个不安全依赖的实现问题(即它可能并不总是按此顺序执行此操作)
  • 它不是“喜欢从右到左写值”。它以任意顺序写入值,具体取决于键的确切值和实现细节,在这种特殊情况下,恰好发生,与您创建时使用的顺序相反字典。
【解决方案2】:

假设您希望它们按字母顺序排列,您可以执行以下操作:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"}  # your dictionary

keylist = a.keys()   # list of keys, in this case ["w3", "w2", "w1"]
keylist.sort()       # sort alphabetically in place, 
                     #  changing keylist to ["w1", "w2", w3"]

for key in keylist:
    print a[key]     # access dictionary in order of sorted keys

【讨论】:

    【解决方案3】:

    正如@IgnacioVazquez-Abrams 提到的,这不是字典中的order 这样的东西,但是您可以通过使用来自http://pypi.python.org/pypi/odict 的有序字典odict 来实现类似的效果

    还可以查看 PEP372 了解更多讨论和 odict 补丁。

    【讨论】:

      【解决方案4】:

      您可以使用collections.OrderedDict(python 2.7 或更高版本——某处有一个 ActiveState 配方为 python 2.4 或更高版本(我认为)提供此功能)来存储您的项目。当然,您需要以正确的顺序将项目插入到字典中({} 语法将不再起作用 - 也不会将 key=value 传递给构造函数,因为正如其他人所提到的,那些依赖于常规没有顺序概念的字典)

      【讨论】:

      • +1 每当有人开始要求 dicts 以任意或排序键顺序以外的方式输出时,OrderedDict 或类似的自定义类就是他们所追求的。
      【解决方案5】:

      字典使用哈希值来关联值。对字典进行排序的唯一方法如下所示:

      dict = {}
      x = [x for x in dict]
      # sort here
      y = []
      for z in x: y.append(dict[z])
      

      我有一段时间没有在 python 中做任何真正的工作,所以我可能有点生疏。如果我错了,请纠正我。

      【讨论】:

        猜你喜欢
        • 2017-02-21
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多