我的代码有问题。它没有打印出我想要的方式。
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
答案 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]))