Satu baris: membuat kamus dari daftar dengan indeks sebagai kuncinya

91

Saya ingin membuat kamus dari daftar yang diberikan, hanya dalam satu baris . Kunci kamus akan menjadi indeks, dan nilai akan menjadi elemen daftar. Sesuatu seperti ini:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

Keluaran:

{0:51, 1:27, 2:13, 3:56}

Saya tidak memiliki persyaratan khusus tentang mengapa saya menginginkan satu baris. Saya hanya menjelajahi python, dan bertanya-tanya apakah itu mungkin.

Nawaz
sumber
3
Menurut Anda, keuntungan apa yang akan Anda peroleh dengan memiliki kamus ini? Pencarian indeks tidak akan lebih cepat dengan kamus.
Martijn Pieters
@MartijnPieters: Yah, aku mungkin perlu, misalnya, ini: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz
3
maka cukup gunakan zip(): dict(zip(x, a)).
Martijn Pieters

Jawaban:

159
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

akan menghasilkan

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

Kembalikan objek enumerasi. sequence harus berupa sequence, iterator , atau objek lain yang mendukung iterasi. The next()metode iterator dikembalikan oleh enumerate()hasil suatu tuplemengandung count (dari awal yang defaultnya 0) dan nilai-nilai yang diperoleh dari iterasi atas urutan :

glglgl
sumber
2
@jamylak Tapi tidak perlu menghapus milikmu. Orang-orang bisa saja belajar tentang count()...
glglgl
50

Dengan konstruktor lain, Anda punya

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)
kiriloff
sumber
7
@StefanoSanfilippo Dict dan set pemahaman telah di-backport ke Python 2.7.
kevingessner
Saya berdiri dikoreksi. Namun, ingatlah bahwa ini tidak berlaku untuk versi Python 2 sebelumnya.
Stefano Sanfilippo
14

Coba enumerate: ini akan mengembalikan daftar (atau iterator) tupel (i, a[i]), dari mana Anda dapat membuat dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b
Stefano Sanfilippo
sumber
13
{x:a[x] for x in range(len(a))}
Emilio M Bumachar
sumber
3

Cukup gunakan pemahaman daftar.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Shahrukh Khan
sumber