Pythonのdict.keys()がセットではなくリストを返すのはなぜですか?


86

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

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

これはPythonAPIの単なる間違いですか、それとも私が見逃している他の理由がありますか?


回答:


98

1つの理由はdict.keys()、言語へのセットの導入よりも前からあることです。

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

セット様ビューに対して、抽象基底クラスに対して定義された動作のすべてがcollections.abc.Set(例えば、利用可能である==<または^)。


6
そして、それはリスト/セット/などではなくビューです。すべてのキーをコピーする必要はめったにないからです。

31
これらのビューはset()!として処理できます。dict.keys() | set()操作を許可します。PY3は:)岩
ヨタ

2
あなたがPY2で立ち往生している場合は、呼び出すことで同じことを行うことができますdict.viewkeys()し、集合演算でそれを使用して|&...
トビア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.