Python中的输出顺序错误

时间:2013-11-13 22:21:07

标签: python sorting dictionary

我的代码有问题。它没有打印出我想要的方式。

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

3 个答案:

答案 0 :(得分:3)

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

from collections import OrderedDict
symTbl = OrderedDict()

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

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

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