Krótkie pytanie i prawdopodobnie krótka odpowiedź, ale nie dostaję tego ^^

d = {'a' : 0, 'b' : 0, 'c' : 0, 'd' : 0}
l = [1, 2, 3, 4]

Chcę ustawić wartości listy do takiego słownika

d = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}

Oczywiście

d['a'], d['b'], d['c'], d['d'] = l

Zrobi to, ale to nie może być właściwy sposób. Co jeśli mam 50 wartości ... pętla, że zamki d i l.

Ale jest coś takiego jak d.values = l, prawda?

Dzięki za pomoc! :)

Edytuj: Używam Pythona 3.7, więc dykt zostanie zamówiony przez wstawianie.

-1
Max16hr 25 luty 2019, 17:46

2 odpowiedzi

Najlepsza odpowiedź

Nie, nie ma krótkiego cięcia. Musisz użyć dict.update z listą par.

d.update(zip(d, l))
7
chepner 25 luty 2019, 15:18

W Python 3.7+ dyct są uporządkowane w kolejności wprowadzanych elementów. Dlatego poniższe byłyby poprawne.

d = {'a' : 0, 'b' : 0, 'c' : 0, 'd' : 0}
for i, k in enumerate(d.keys(), 1):
    d[k] = i

Lub możesz użyć czegoś takiego jak:

d['a'], d['b'], d['c'], d['d'] = range(1,5) #or 1, 2, 3, 4

Edytuj

Jeden liniowiec za pomocą dict rozumienia:

d = {key: val for val, key in enumerate(d.keys(), 1)}
1
Jab 25 luty 2019, 15:14