2013-11-13 3 views
3

С моим кодом что-то не так. Он не печатает так, как я хотел.Неверный порядок вывода в 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 
+0

Стоит отметить, что словари не поддерживают порядок. Именно поэтому, когда вы печатаете из 'symTbl', вы не видите ожидаемого порядка. – meghamind

ответ

1

Или, вы можете просто отсортировать словарь:

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

Это хорошо работает! Спасибо! – Singh2013

+0

Нет проблем! Спросите еще раз, когда вы нам понадобятся. – aIKid

3

Y ou нужно использовать упорядоченный словарь. Нет гарантии, в каком порядке вы получите свои ключи, когда будете читать их (используя цикл for в вашем случае) из словаря. OrderedDict всегда будет возвращать ключи в том порядке, в котором они были введены.

from collections import OrderedDict 
symTbl = OrderedDict() 
+0

Спасибо. Просто любопытно, есть ли другой способ сделать это? Я понял. Спасибо, что нашли время ответить на мой вопрос! – Singh2013

+2

уверен, посмотрите на ответ ниже, они оба действительны. – jramirez

2

OrderedDict сохраняет порядок вставки, он не сортировать по ключу. Иногда это то, чего хотят люди, иногда это не так.

Если вы только нуждаясь отсортированные ключи один раз, вы могли бы сделать что-то вроде:

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

Если вам нужно отсортированные значения много раз (IOW, внутри цикла), вы лучше с декартово дерево , красно-черное дерево или (на диске, если ваши значения не вписываются в память). EG: http://en.wikipedia.org/wiki/Treap

Смежные вопросы