2012-12-14 38 views
60

Tôi đã dự kiến ​​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 nhất với loại bảo đảm rằng các khóa của một hashmap sẽ cung cấp. Cụ thể, chúng là duy nhất và không được sắp xếp, như một bộ. Tuy nhiên, phương thức này trả về một danh sách:Tại sao dict.keys của Python() trả về một danh sách chứ không phải một bộ?

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

Đây có phải là một sai lầm trong API Python hoặc có lý do nào khác mà tôi bị thiếu không?

Trả lời

58

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

Lưu ý rằng kiểu trả về dict.keys() đã thay đổi trong Python 3: hàm hiện trả về view thay vì danh sách.

+5

Và đó là chế độ xem thay vì danh sách/tập hợp/v.v. bởi vì hiếm khi cần sao chép tất cả các khóa. – delnan

+9

và các chế độ xem đó có thể được xử lý dưới dạng 'set()'! cho phép 'dict.keys() | set() 'hoạt động. Đá Py3 :) – yota

+0

Nếu bạn đang mắc kẹt với Py2, bạn có thể làm tương tự bằng cách gọi 'dict.viewkeys()' và sử dụng nó với các hoạt động thiết lập '|', '&' ... – Tobia

Các vấn đề liên quan