Python> = 3.5 alternatif: liste hazır bilgisine aç [*newdict]
Python 3.5 ile yeni ambalaj açma genellemeleri (PEP 448) tanıtıldı ve artık kolayca şunları yapabilmenizi sağlıyor:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Paketten çıkarma işlemi yinelenebilir herhangi bir nesneyle *
çalışır ve sözlükler yinelendiğinde anahtarlarını döndürdüğü için, liste hazır bilgisi içinde kullanarak kolayca bir liste oluşturabilirsiniz.
Ekleme .keys()
ie [*newdict.keys()]
bu size bir işlev göz alma ve çağırma mal olacak olsa niyet biraz daha açık yapımında yardımcı olabilir. (dürüst olmak gerekirse, gerçekten endişelenmeniz gereken bir şey değildir ).
*iterable
Sözdizimi yapıyor benzer list(iterable)
ve davranış başlangıçta belgelenmiştir Aramalar bölümünde Python Referans kılavuzun. PEP 448 ile nerede *iterable
görünebileceğine dair kısıtlama, liste, set ve grup değişmezlerine de yerleştirilmesine izin verecek şekilde gevşetildi, İfade listelerindeki referans el kitabı da bunu belirtmek için güncellendi.
list(newdict)
Aslında hiçbir işlev çağrısı yapılmadığından daha hızlı (en azından küçük sözlükler için) farkına eşdeğer olsa da :
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
daha büyük sözlüklerde hız hemen hemen aynıdır (büyük bir koleksiyonda yineleme yükü, bir işlev çağrısının küçük maliyetini azaltır).
Benzer bir şekilde, tuples ve sözlük anahtar kümeleri oluşturabilirsiniz:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
tuple durumda sondaki virgül sakının!