파이썬의 dict.keys ()가 집합이 아닌 목록을 반환하는 이유는 무엇입니까?


90

파이썬의 키 메서드가 목록 대신 집합을 반환 할 것으로 예상했을 것입니다. 해시 맵의 키가 제공하는 보증의 종류와 가장 유사하기 때문입니다. 특히, 그것들은 세트처럼 고유하고 정렬되지 않습니다. 그러나이 메서드는 목록을 반환합니다.

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

이것은 Python API의 실수입니까 아니면 내가 놓친 다른 이유가 있습니까?


1
이것은 더 이상 파이썬 3의 경우입니다 docs.python.org/3/library/stdtypes.html#dict-views
보리스

답변:


100

한 가지 이유는 dict.keys()언어에 세트가 도입되기 이전에 있기 때문입니다 .

반환 유형은 dict.keys()Python 3에서 변경되었습니다. 이제 함수 는 목록이 아닌 "세트와 유사한" 보기를 반환 합니다.

집합 형 뷰의 경우 추상 기본 클래스에 대해 정의 된 모든 작업 collections.abc.Set을 사용할 수 있습니다 (예 ==: <, 또는 ^).


6
그리고 그것은 목록 / 세트 / 등 대신에보기입니다. 모든 키를 복사 할 필요가 거의 없기 때문입니다.

31
그리고 그 뷰는 set()! dict.keys() | set()작업 을 허용 합니다. Py3는 :) 바위
YOTA

2
Py2를 dict.viewkeys()사용하는 경우 set 작업 을 호출 하고 사용하여 동일한 작업을 수행 할 수 있습니다 |. &...
Tobia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.