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 に答える