Tại sao dict.keys () của Python trả về một danh sách chứ không phải một tập hợp?


86

Tôi đã mong đợi phương thức khóa của Python trả về một tập hợp thay vì một danh sách. Vì nó gần giống với loại đảm bảo mà các khóa của một bản đồ băm sẽ cung cấp. Cụ thể, chúng là duy nhất và không được sắp xếp, giống như một tập hợp. Tuy nhiên, phương thức này trả về một danh sách:

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

Đây chỉ là một lỗi trong API Python hay là có một số lý do khác khiến tôi bị thiếu?


1
Điều này không còn xảy ra trong Python 3. docs.python.org/3/library/stdtypes.html#dict-views
Boris

Câu trả lời:


98

Một lý do là dict.keys()trước khi giới thiệu các bộ vào ngôn ngữ.

Lưu ý rằng các kiểu trả về của dict.keys()đã thay đổi trong Python 3: chức năng hiện nay trả về một "set-như" quan điểm chứ không phải là một danh sách.

Đối với thiết như quan điểm, tất cả các hoạt động được định nghĩa cho lớp cơ sở trừu tượng collections.abc.Setcó sẵn (ví dụ ==, <hoặc ^).


6
Và đó là một dạng xem thay vì một danh sách / bộ / v.v. bởi vì hiếm khi cần phải sao chép tất cả các khóa.

31
và những lượt xem đó có thể được xử lý như một set()! cho phép các dict.keys() | set()hoạt động. Py3 đá :)
Yota

2
Nếu bạn đang bị mắc kẹt với Py2, bạn có thể làm như vậy bằng cách gọi dict.viewkeys()và sử dụng nó với hoạt động thiết lập |, &...
Tobia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.