Saya ingin dapatkan dari ini:
keys = [1,2,3]
untuk ini:
{1: None, 2: None, 3: None}
Apakah ada cara pythonic untuk melakukannya?
Ini adalah cara jelek untuk melakukannya:
>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}
dictionary
python
Juanjo Conti
sumber
sumber
dict.fromkeys([1, 2, 3], [])
, Semua tombol dipetakan ke daftar yang sama, dan memodifikasi satu akan memodifikasi semuanya.{k:[] for k in [1, 2, 3]}
masih aman.tidak ada yang peduli untuk memberikan solusi pemahaman dict?
sumber
False
).sumber
dict.fromkeys(keys, [])
Keluaran:
sumber
keyDict
menyesatkan, karena baris pertama kode mengembalikan aset
, bukan adict
.sumber
TypeError: 'type' object is not iterable
:?list
adalah tipe. Kecuali Anda memiliki sesuatu sepertilist = []
, metode di atas akan selalu memberi Anda kesalahan yang samaDi banyak alur kerja di mana Anda ingin melampirkan nilai default / awal untuk kunci sewenang-wenang, Anda tidak perlu hash masing-masing tombol secara terpisah sebelumnya. Anda bisa menggunakannya
collections.defaultdict
. Sebagai contoh:Ini lebih efisien, menghemat hash semua kunci Anda di instantiation. Selain itu,
defaultdict
adalah subkelas daridict
, jadi biasanya tidak perlu mengkonversi kembali ke kamus biasa.Untuk alur kerja di mana Anda memerlukan kontrol pada kunci yang diizinkan, Anda dapat menggunakan
dict.fromkeys
sesuai jawaban yang diterima:sumber