Python> = 3,5 alternatif: buka paket ke daftar literal [*newdict]
Generalisasi unpacking baru (PEP 448) diperkenalkan dengan Python 3.5 yang memungkinkan Anda sekarang dengan mudah melakukannya:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Membongkar dengan *
karya dengan objek apa pun yang dapat diubah dan, karena kamus mengembalikan kunci mereka saat diulangi, Anda dapat dengan mudah membuat daftar dengan menggunakannya dalam daftar literal.
Menambahkan .keys()
mis. [*newdict.keys()]
Mungkin membantu dalam membuat maksud Anda sedikit lebih eksplisit meskipun itu akan membebani Anda fungsi pencarian dan doa. (yang, dalam semua kejujuran, bukan sesuatu yang harus benar-benar khawatir tentang).
The *iterable
sintaks mirip dengan melakukan list(iterable)
dan perilakunya awalnya didokumentasikan dalam bagian Panggilan dari manual Python Referensi. Dengan PEP 448 pembatasan di mana *iterable
bisa muncul dilonggarkan memungkinkan untuk juga ditempatkan dalam daftar, set dan tuple literal, manual referensi pada daftar Ekspresi juga diperbarui untuk menyatakan ini.
Meskipun setara list(newdict)
dengan perbedaan yang lebih cepat (setidaknya untuk kamus kecil) karena tidak ada pemanggilan fungsi yang benar-benar dilakukan:
%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
dengan kamus yang lebih besar kecepatannya hampir sama (overhead iterasi melalui koleksi besar mengalahkan biaya panggilan fungsi yang kecil).
Dengan cara yang sama, Anda dapat membuat tupel dan set kunci kamus:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
Waspadalah terhadap koma yang tertinggal di kotak tuple!