Daftar tupel ke kamus

112

Inilah cara saya saat ini mengubah daftar tupel ke kamus dengan Python:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

Apakah ada cara yang lebih baik? Sepertinya harus ada satu garis untuk melakukan ini.

Sarah Vessels
sumber

Jawaban:

179

Panggil saja dict()daftar tupel secara langsung

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
Sven Marnach
sumber
1
Derp, saya tahu akan ada cara sederhana untuk melakukannya ... Berasal dari Ruby di sini, mencoba mempelajari cara Python dalam melakukan sesuatu. Terima kasih!
Sarah Vessels
5
@chandresh ini tidak bekerja di Python 3, sehingga tidak ada update diperlukan.
Sven Marnach
@SvenMarnach, Ini adalah output saya dari perintah yang sama yang telah Anda tulis di atas pada terminal py 3.5. Traceback (panggilan terakhir terakhir): File "<ipython-input-313-7bb3559567ff>", baris 1, dalam <module> dict (my_list) TypeError: Objek 'Dictionary' tidak dapat dipanggil
CKM
4
@chandresh Ini tidak ada hubungannya dengan Python 3 - itu karena Anda memiliki variabel yang disebut dict, membayangi Python built-in dengan nama yang sama. Anda tidak boleh melakukan itu.
Sven Marnach
@Bayu_joo Terima kasih. Berhasil. Sebenarnya, saya mendapat beberapa kode dari web dan mencoba menjalankannya. Sepertinya penulis telah menggunakan dictnama variabel dari tempat saya mendapatkan kesalahan. Terima kasih lagi.
CKM
23

The dictkonstruktor menerima input persis seperti yang Anda memilikinya (key / value tupel).

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

Dari dokumentasi :

Misalnya, ini semua mengembalikan kamus yang sama dengan {"one": 1, "two": 2}:

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])
FogleBird
sumber
15

Dengan dictpemahaman:

h = {k:v for k,v in l}
Kenly
sumber
4
bagus karena memungkinkan Anda melakukan pemformatan pada kunci / nilai sebelum menambahkannya ke dict
jfunk
7

Tampaknya semua orang di sini menganggap daftar tupel memiliki pemetaan satu lawan satu antara kunci dan nilai (misalnya tidak memiliki kunci duplikat untuk kamus). Karena ini adalah pertanyaan pertama yang muncul untuk mencari topik ini, saya memposting jawaban untuk kasus yang lebih umum di mana kita harus berurusan dengan duplikat:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
pegah
sumber