Sözlüğe tuple listesi


112

Python'da şu anda bir tuple listesini sözlüğe nasıl dönüştürüyorum:

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

Daha iyi bir yol var mı? Görünüşe göre bunu yapmak için tek hat olmalı.

Yanıtlar:


179

dict()Doğrudan tuple listesini aramanız yeterli

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

1
Derp, bunu yapmanın basit bir yolu olacağını biliyordum ... Buraya Ruby'den geliyorum, işleri yapmanın Python yolunu öğrenmeye çalışıyorum. Teşekkürler!
Sarah Vessels

5
Bu @chandresh yapar hiçbir güncelleştirme gerekmez böylece, Python 3 iş.
Sven Marnach

@SvenMarnach, İşte yukarıda py 3.5 terminalinde yazdığınız aynı komutun çıktısı. Traceback (en son çağrı): Dosya "<ipython-input-313-7bb3559567ff>", satır 1, <module> dict (my_list) TypeError: 'Dictionary' nesnesi çağrılabilir değil
CKM

4
@chandresh Bunun Python 3 ile ilgisi yok - bunun nedeni dict, aynı ada sahip yerleşik Python'u gölgeleyen adlı bir değişkene sahip olmanızdır . Bunu asla yapmamalısın.
Sven Marnach

@SvenMarnach Oh. Teşekkürler. İşe yaradı. Aslında web'den bir kod aldım ve bunu çalıştırmayı denedim. Görünüşe göre yazar dict, hatayı aldığım yerden değişken adı olarak kullanmış . Tekrar teşekkürler.
CKM

23

dictYapıcı bunu (anahtar / değer tuples) sahip tam olarak girişini kabul eder.

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

Gönderen belgeler :

Örneğin, bunların tümü {"bir": 1, "iki": 2} 'ye eşit bir sözlük döndürür:

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


7

Görünüşe göre buradaki herkes tuple listesinin anahtar ve değerler arasında bire bir eşleşmeye sahip olduğunu varsayıyor (örneğin, sözlük için yinelenen anahtarlara sahip değil). Bu konuyla ilgili ilk soru bu olduğundan, yinelenenlerle uğraşmamız gereken daha genel bir durum için bir yanıt gönderiyorum:

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]}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.