2009-06-18 16 views
6

可能性の重複:
Python dictionary: are keys() and values() always the same order?Dictはキーと値を同じ順序で返しますか?

私はPythonでdictonaryを持っている場合は、.keysと.valuesは同じ順序で対応する要素を返しますか?

など。それが返すキーについては

foo = {'foobar' : 1, 'foobar2' : 4, 'kittty' : 34743} 

>>> foo.keys() 
['foobar2', 'foobar', 'kittty'] 

今foo.values()は、対応するキーと同じ順序で常に要素を返しますか?

答えて

17

それはPython documentationに向上させることは難しい。

キーと値は、非ランダムであるPythonの実装を横切って変化し、挿入および欠失の辞書の履歴に依存する任意の順序で列挙されています。 items(),keys(),values(),iteritems(),iterkeys()およびitervalues()が呼び出された場合、そのリストは直接的に対応する。これにより、を使用して(value, key)ペアを作成することができますiterkeys()itervalues()の方法で同じ関係が成立します。pairs = zip(d.itervalues(), d.iterkeys())は同じ値をペアに提供します。同じリストを作成するもう1つの方法は、あなたがkeys()values()へのお電話に通話の間に辞書を変更してはなりません警告し、「はい」要するに、だから、pairs = [(v, k) for (k, v) in d.iteritems()]

です。

+0

このようなばかげた馬鹿。私はその重要な点を完全に逃しました。 :( – UberJumper

1

はい、彼らは

だけPython docでドキュメントが表示されます。

キーと値が非ランダムで任意の順に表示され、Pythonの実装で変化し、辞書のに依存します挿入および削除の履歴。 item()、keys()、values()、iteritems()、iterkeys()、およびitervalues()が辞書に介入しないで呼び出された場合、リストは直接対応します。行うには

ベスト事がdict.items()はPython 2.6のドキュメントから

1

を使用することはまだです:

キーと値が非ランダムである任意の順序で列挙されています、 Pythonの実装によって異なり、辞書の挿入と削除の履歴に依存します。 items(),keys(),values(),iteritems(),iterkeys()およびitervalues()が呼び出された場合、そのリストは直接的に対応する。これにより、zip(): pairs = zip(d.values(), d.keys())を使用して(値、キー)ペアを作成することができます。iterkeys()itervalues()の方法でも同じ関係が成り立ちます。pairs = zip(d.itervalues(), d.iterkeys())は、同じ値をペアに提供します。同じリストを作成する別の方法はpairs = [(v, k) for (k, v) in d.iteritems()]です。

私は99%以上が確実にPython 3.0に当てはまります。

+0

Python 3.0については推測する必要はありません。ドキュメントはhttp://docs.python.org/3.0/library/stdtypes.html#dictionary-view-objects and affirmativeです。 –

関連する問題