Mengapa dict.keys () Python mengembalikan daftar dan bukan satu set?

90

Saya akan mengharapkan metode kunci Python mengembalikan satu set, bukan daftar. Karena ini sangat mirip dengan jenis jaminan yang akan diberikan oleh kunci dari hashmap. Secara khusus, mereka unik dan tidak diurutkan, seperti satu set. Namun, metode ini mengembalikan daftar:

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

Apakah ini hanya kesalahan dalam Python API atau adakah alasan lain yang saya lewatkan?

diri
sumber
1
Ini tidak lagi terjadi di Python 3. docs.python.org/3/library/stdtypes.html#dict-views
Boris

Jawaban:

100

Salah satu alasannya adalah itu dict.keys()mendahului pengenalan set ke dalam bahasa.

Perhatikan bahwa jenis kembalinya dict.keys()telah berubah di Python 3: fungsi sekarang mengembalikan sebuah "set-seperti" tampilan daripada daftar.

Untuk set-seperti pandangan, semua operasi yang didefinisikan untuk kelas dasar abstrak collections.abc.Setyang tersedia (misalnya, ==, <, atau ^).

NPE
sumber
6
Dan itu adalah tampilan, bukan daftar / set / etc. karena jarang ada kebutuhan untuk menyalin semua kunci.
31
dan pandangan tersebut dapat ditangani sebagai set()! yang memungkinkan dict.keys() | set()operasi. Batuan Py3 :)
yota
2
Jika Anda terjebak dengan Py2, Anda dapat melakukan hal yang sama dengan memanggil dict.viewkeys()dan menggunakannya dengan operasi yang ditetapkan |, &...
Tobia