2012-12-14 8 views
60

私はPythonのkeysメソッドがリストの代わりにセットを返すと期待していました。ハッシュマップのキーが与える保証の種類に最もよく似ているからです。具体的には、それらはユニークであり、セットのようにソートされません。しかし、このメソッドはリストを返します:なぜPythonのdict.keys()はリストではなく、セットを返しますか?

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

これはPython APIの間違いですか、それとも私が行方不明の他の理由がありますか?

答えて

58

1つの理由は、dict.keys()が言語へのセットの導入に先立っていることです。

dict.keys()の戻り値の型がPython 3で変更されました。関数はリストではなくviewを返します。

+5

リスト/セット/などの代わりにビューです。すべてのキーをコピーする必要はほとんどないからです。 – delnan

+9

これらのビューは 'set()'として扱うことができます!これは 'dict.keys()| set() '操作を実行します。 Py3 rocks :) – yota

+0

もしあなたがPy2で動かないなら、 'dict.viewkeys()'を呼び出して、 '?'、 '&'というセット操作でそれを使うことで同じことができます – Tobia

関連する問題