4

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

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
4

3 回答 3

3

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

from collections import OrderedDict
symTbl = OrderedDict()
于 2013-11-13T22:22:04.513 回答
2

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

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

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

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

于 2013-11-13T22:34:52.817 回答
1

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

for var1 in sorted(symTbl):
    print(var1 + " => " + str(symTbl[var1]))
于 2013-11-13T22:26:07.940 回答