103

Python の keys メソッドがリストではなくセットを返すことを期待していました。それは、ハッシュマップのキーが与える保証の種類に最もよく似ているためです。具体的には、それらは一意であり、セットのように並べ替えられていません。ただし、このメソッドはリストを返します。

>>> d = {}
>>> d.keys().__class__
<type 'list'>

これは Python API の単なる間違いですか、それとも他に何か理由がありますか?

4

2 に答える 2

117

理由の 1 つはdict.keys()、言語にセットが導入されるよりも前のことです。

の戻り値の型が Python 3 で変更されたことに注意してください。この関数は、リストではなくdict.keys()「セットのような」ビューを返すようになりました。

セットのようなビューの場合、抽象基本クラスに対して定義されたすべての操作collections.abc.Setを使用できます (たとえば、==<または^)。

于 2012-12-14T20:58:45.130 に答える
1

順序が保証されているためです。

Python 3.7.0では、dict オブジェクトの挿入順序保存の性質は、Python 言語仕様の公式の一部であると宣言されています。したがって、あなたはそれに依存することができます。

Python 3.6 では、cpython を使用すると順序付けられます。

以前のバージョンでは、おそらく誰もが 3.7 を望んでいました。

于 2021-03-04T20:35:45.940 に答える