2014-01-05 2 views
1

я пишу функцию, как это в Python:Порядок печати, когда элементы использования() в Python

def test(**argv): 
    for k,v in argv.items(): 
     print k,v 

и использовать функцию как это:

test(x = 1, y=2, z=3) 

Распечатка заключается в следующем:

y 2 
x 1 
z 3 

Я задавался вопросом, почему результат распечатке не

?:
x 1 
y 2 
z 3 

Любая помощь здесь?

+0

Возможный дубликат [В Python, что определяет порядок при итерации через kwargs?] (Http://stackoverflow.com/questions/8977594/in-python-what-determines-the-order-while-iterating-through -kwargs) – jonrsharpe

+0

@ jonrsharpe whoops, извините, что мне теперь делать? – CSnerd

+0

Прочтите связанный вопрос, удалите его, если вы согласны с тем, что он ответил там, иначе дождитесь, пока сообщество проголосует, чтобы решить, что должно произойти. См. Http://stackoverflow.com/help/duplicates – jonrsharpe

ответ

5

Если вы напечатаете типargv, вы поймете, что это словарь.

Словари неупорядочены в Python. Вот почему вы получаете этот результат.

Тест

def test(**argv): 
    print type(argv) 

test() 

>>> <type 'dict'> 
2

словарь представляет собой хэш-таблицу, порядок ключей не гарантируется. Вам необходимо сохранить заказ - есть collections.OrderedDict, который сохраняет порядок добавления элементов.

+0

Вы можете использовать '** kwargs' OrderedDict? Я думаю, вам понадобится post-hoc 'sort' – jonrsharpe

+0

@jonrsharpe Исправить. Вы можете сортировать пары значений ключа, но даже таким образом вы не можете получить заказ, который аргументы ключевого слова были выписаны на сайте вызова. – delnan

+0

@jonrsharpe, yep, порядок не сохраняется, если упорядоченный словарь передается как аргумент ключевого слова. – volcano

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