【问题标题】:Print original input order of dictionary in python在python中打印字典的原始输入顺序
【发布时间】:2013-12-05 07:30:06
【问题描述】:

如何按照我设置的原始顺序打印我的字典?

如果我有这样的字典:

smallestCars = {'Civic96': 12.5, 'Camry98':13.2, 'Sentra98': 13.8}

我这样做:

for cars in smallestCars:
    print cars

它输出:

Sentra98
Civic96
Camry98

但我想要的是这样的:

Civic96
Camry98
Sentra98

有没有办法按顺序打印原始字典而不将其转换为列表?

【问题讨论】:

  • 那是散列 :) 没有按任何顺序排序
  • 但是为什么打印时顺序改变了,为什么没有按指定打印

标签: python list python-2.7 dictionary printing


【解决方案1】:

常规字典没有顺序。你需要使用collections模块的OrderedDict,它可以取一个列表列表或者一个元组列表,就像这样:

import collections

key_value_pairs = [('Civic86', 12.5),
                   ('Camry98', 13.2),
                   ('Sentra98', 13.8)]
smallestCars = collections.OrderedDict(key_value_pairs)

for car in smallestCars:
    print(car)

输出是:

Civic96
Camry98
Sentra98

【讨论】:

    【解决方案2】:

    字典不需要保持顺序。使用OrderedDict

    【讨论】:

      【解决方案3】:
      >>> for car in sorted(smallestCars.items(),key=lambda x:x[1]):
      ...     print car[0]
      ... 
      Civic96
      Camry98
      Sentra98
      

      【讨论】:

        【解决方案4】:

        当您创建字典时,python 不关心您编写元素的顺序,并且它不会记住对象创建后的顺序。您不能期望它(常规字典)以相同的顺序打印。更改代码结构是您在这里的最佳选择,正如其他人所说,OrderedDict 是一个不错的选择。

        【讨论】:

          【解决方案5】:

          您可以使用元组(嵌套)数组来执行此操作:

          smallestCars = [['Civic86', 12.5],
                         ['Camry98', 13.2],
                         ['Sentra98', 13.8]]
          
          for car, size in smallestCars:
              print(car, size)
          
          # ('Civic86', 12.5)
          # ('Camry98', 13.2)
          # ('Sentra98', 13.8)
          

          【讨论】:

            猜你喜欢
            • 2019-06-27
            • 1970-01-01
            • 1970-01-01
            • 2023-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多