Lista krotek do słownika

112

Oto jak obecnie konwertuję listę krotek na słownik w Pythonie:

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

Czy jest lepszy sposób? Wygląda na to, że powinien istnieć jeden wiersz, aby to zrobić.

Sarah Vessels
źródło

Odpowiedzi:

179

Po prostu zadzwoń dict()bezpośrednio z listy krotek

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
Sven Marnach
źródło
1
Derp, wiedziałem, że będzie prosty sposób na zrobienie tego ... Pochodzę z Rubiego tutaj, próbując nauczyć się sposobu działania w Pythonie. Dzięki!
Sarah Vessels
5
@chandresh To czyni pracę w Pythonie 3, więc nie jest wymagana żadna zmiana.
Sven Marnach
@SvenMarnach, Oto moje wyjście tego samego polecenia, które napisałeś powyżej na terminalu py 3.5. Traceback (ostatnie połączenie): Plik „<ipython-input-313-7bb3559567ff>”, wiersz 1, w <module> dict (my_list) TypeError: Obiekt „Dictionary” nie jest wywoływany
CKM
4
@chandresh Nie ma to nic wspólnego z Pythonem 3 - dzieje się tak dlatego, że masz zmienną o nazwie dict, która przesłania element wbudowany Pythona o tej samej nazwie. Nigdy nie powinieneś tego robić.
Sven Marnach
@SvenMarnach Oh. Dzięki. Zadziałało. Właściwie to dostałem kod z sieci i próbowałem to uruchomić. Wygląda na to, że autor użył dictnazwy zmiennej, z której otrzymałem błąd. Dzięki jeszcze raz.
CKM
23

dictKonstruktor przyjmuje wejście dokładnie jak masz go (krotki klucz / wartość).

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

Z dokumentacji :

Na przykład wszystkie zwracają słownik równy {"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
źródło
15

Ze dictzrozumieniem:

h = {k:v for k,v in l}
Kenly
źródło
4
fajne, ponieważ pozwala na formatowanie klucza / wartości przed dodaniem go do
dyktowania
7

Wygląda na to, że wszyscy tutaj zakładają, że lista krotek ma mapowanie jeden do jednego między kluczem a wartościami (np. Nie ma zduplikowanych kluczy dla słownika). Ponieważ jest to pierwsze pytanie, które pojawia się podczas wyszukiwania tego tematu, zamieszczam odpowiedź na bardziej ogólny przypadek, w którym mamy do czynienia z duplikatami:

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
źródło