Python'un dict.keys () bir liste değil de neden bir liste döndürür?


90

Python'un anahtar yönteminin bir liste yerine bir küme döndürmesini beklerdim. Bir hashmap anahtarının vereceği garantilere en çok benzediğinden. Spesifik olarak, benzersizdirler ve bir set gibi sıralanmazlar. Ancak, bu yöntem bir liste döndürür:

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

Bu sadece Python API'sinde bir hata mı yoksa kaçırmamın başka bir nedeni var mı?


1
Python 3'te artık durum böyle değil. Docs.python.org/3/library/stdtypes.html#dict-views
Boris

Yanıtlar:


100

Bunun bir nedeni, dict.keys()setlerin dile girişinden önce olmasıdır.

dict.keys()Python 3'te dönüş türünün değiştiğine dikkat edin: işlev artık bir liste yerine "set benzeri" bir görünüm döndürür .

İçin grubu gibi görünümler, soyut temel sınıf için tarif edilen işlemler her collections.abc.Setmevcuttur (örneğin, ==, <ya da ^).


6
Ve bir liste / set / vb yerine bir görünümdür. çünkü nadiren tüm anahtarların kopyalanmasına ihtiyaç duyulur.

31
ve bu görünümler bir set()! dict.keys() | set()işlemlere izin veren . Py3 rock :)
yota

2
Py2 ile takıldıysanız, arayarak dict.viewkeys()ve onu ayarlanmış işlemlerle kullanarak aynısını yapabilirsiniz |, &...
Tobia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.