【问题标题】:Wrong output order in PythonPython中错误的输出顺序
【发布时间】:2013-11-13 22:21:07
【问题描述】:

我的代码有问题。它不会按照我想要的方式打印出来。

print("Hello Herp, welcome to Derp v1.0 :)")

inFile = input("Herp, enter symbol table file: ")
symTbl = {}
for line in open(inFile):
    i = line.split()
    symTbl[i[0]] = int(i[1])
print("Derping the symbol table (variable name => integer value)...")
for var1 in symTbl:
    print(var1 + " => " + str(symTbl[var1]))

当我打开文本文件时,它会打印出来:

z => 30
y => 20
x => 10

这是不对的,我希望有这样的输出:

x => 10
y => 20
z => 30

原来的文本文件是这样的:

x 10
y 20
z 30

【问题讨论】:

  • 值得注意的是,字典不保持秩序。这就是您从symTbl 打印时看不到预期顺序的原因。

标签: python sorting dictionary


【解决方案1】:

您需要使用有序字典。当您从字典中读取密钥(在您的情况下使用 for 循环)时,无法保证您将按什么顺序获取密钥。 OrderedDict 将始终按照输入的顺序返回键。

from collections import OrderedDict
symTbl = OrderedDict()

【讨论】:

  • 谢谢。只是好奇,还有其他方法吗?我现在明白了。感谢您抽出宝贵时间回答我的问题!
  • 当然,看看下面的答案,它们都是有效的。
【解决方案2】:

OrderedDict 保留插入顺序,它不按键排序。有时这是人们想要的,有时不是。

如果您只需要排序的键一次,您可以执行以下操作:

for key, value in sorted(list(symTbl.items())):
    print('{} ==> {}'.format(key, value))

如果您需要多次排序值(IOW,在循环内),最好使用 treap、红黑树或(在磁盘上,以防您的值不适合内存)BTree。例如:http://en.wikipedia.org/wiki/Treap

【讨论】:

    【解决方案3】:

    或者,您可以对字典进行排序:

    for var1 in sorted(symTbl):
        print(var1 + " => " + str(symTbl[var1]))
    

    【讨论】:

    • 完全没问题!当您需要我们时再询问。
    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 2019-09-02
    • 2021-03-22
    • 1970-01-01
    • 2021-10-16
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多