簡體   English   中英

Python中的輸出順序錯誤

[英]Wrong output order in Python

我的代碼有問題。 它沒有打印出我想要的方式。

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

您需要使用有序詞典。 當您從字典中讀取密鑰(在您的情況下使用for循環)時,無法保證您將獲得密鑰的順序。 OrderedDict將始終按照輸入的順序返回鍵。

from collections import OrderedDict
symTbl = OrderedDict()

OrderedDict保留插入順序,不按鍵排序。 有時這就是人們想要的東西,有時卻不是。

如果您只需要一次排序鍵,您可以執行以下操作:

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

如果您需要多次排序值(IOW,在循環內),最好使用treap,紅黑樹或(在磁盤上,以防您的值不適合內存)BTree。 EG: http//en.wikipedia.org/wiki/Treap

或者,您可以對字典進行排序:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM