2017-11-03 8 views
6

素朴な疑問:Python辞書リテラルの割り当て:セマンティクスは保証されていますか?

Python 2.6.6 (r266:84292, Aug 9 2016, 06:11:56) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {'foo':1,'foo':2} 
>>> print d 
{'foo': 2} 
>>> d = {'foo':2,'foo':1} 
>>> print d 
{'foo': 1} 

だから、私は、変数への重複キーを持つリテラル辞書を割り当てた場合、それは、少なくともこの特定のPythonのバージョンのために、使用され、第2の鍵/ペアであると思われます。

この動作は保証されていますか? Dictionary displays documentationから

+1

重複:https://stackoverflow.com/questions/39678672/is-a-python-dict-comprehension-always-last-wins-if-there-are-duplicate-keys – lqez

答えて

8

キー/基準ペアのカンマで区切られた配列が与えられた場合、それらは辞書のエントリを定義するために左から右するために評価される:各キーオブジェクトが使用されています対応するデータを格納するための辞書としてのキーとして使用します。 これは、キー/データムリストに同じキーを複数回指定でき、そのキーの最終的な辞書の値が最後に指定された値になることを意味します。

(太字強調)。

はい、これは保証されています。すべてのPython実装はこれを遵守しなければなりません。上記の仕様からの逸脱はバグでしょう。

旧式のPythonバージョンのドキュメントでは必ずしも最後の文が含まれているとは限りませんが、評価の順序は常に明示的です。

+0

Python 2.6のテキストOPの使い方)は少し違っています:https://docs.python.org/2.6/reference/expressions.html#dictionary-displays –

+0

@StefanPochmann:2の動作は変わりませんが、表現はキー表現の前に評価された。 –

+0

@StefanPochmann:[Pythonのdictリテラルは、書かれた順番で評価されますか?](// stackoverflow.com/q/28156687) –

関連する問題