我用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
這裏有什麼幫助嗎?
我用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
這裏有什麼幫助嗎?
如果您打印類型的argv
,您會意識到它是一本字典。
詞典在Python中是無序的。這就是爲什麼你得到這個輸出。
測試
def test(**argv):
print type(argv)
test()
>>> <type 'dict'>
字典是一個哈希表,該鍵的順序不被保證。您需要保留訂單 - 有collections.OrderedDict
,它保留了元素添加的順序。
您可以使用** ** kwargs使用OrderedDict嗎?我認爲你需要一個事後'排序' – jonrsharpe
@jonrsharpe正確。您可以對鍵值對進行排序,但即使如此,您也無法檢索關鍵字參數在呼叫站點寫出的順序。 – delnan
@jonrsharpe,是的,如果有序字典作爲關鍵字參數傳遞,則順序不會被保留。 – volcano
可能的重複[在Python中,什麼決定了通過kwargs迭代時的順序?](http://stackoverflow.com/questions/8977594/in-python-what-determines-the-order-while-iterating-through -kwargs) – jonrsharpe
@ jonrsharpe哎呀,抱歉,我現在該怎麼辦? – CSnerd
閱讀鏈接的問題,如果您同意在那裏回答,請刪除您的問題,否則請等待社區投票決定發生什麼。見http://stackoverflow.com/help/duplicates – jonrsharpe