mam a = [1,2,3,4]
i chcę d = {1:0, 2:0, 3:0, 4:0}
Jak utworzyć słownik z kluczami z listy i wartościami domyślnymi na (powiedzmy) zero?
d = dict(zip(q,[0 for x in range(0,len(q))]))
działa, ale jest brzydki. Co to jest czystszy sposób?
mam a = [1,2,3,4]
i chcę d = {1:0, 2:0, 3:0, 4:0}
Jak utworzyć słownik z kluczami z listy i wartościami domyślnymi na (powiedzmy) zero?
d = dict(zip(q,[0 for x in range(0,len(q))]))
działa, ale jest brzydki. Co to jest czystszy sposób?
dict((el,0) for el in a)
będzie działać dobrze.
Python 2.7 i wyżej także obsługują interpretację Dict. Ta składnia to {el:0 for el in a}
.
d = dict([(x,0) for x in a])
** edit Rozwiązanie Tima jest lepsze, ponieważ wykorzystuje generatory, aby zobaczyć komentarz do jego odpowiedzi.
Oprócz odpowiedź Tima, który jest bardzo odpowiedni do konkretnego przykładu, warto wspomnieć collections.defaultdict
, który pozwala robić rzeczy tak:
>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}
do mapowania [1, 2, 3, 4]
jak w przykładzie, że to ryba bez wody. Ale w zależności od powodu, dla którego zadałeś pytanie, może to być bardziej odpowiednia technika.
d = dict.fromkeys(a, 0)
a
lista, 0
jest wartość domyślna. Należy zwrócić uwagę, aby nie ustawiać wartości domyślnej dla jakiegoś zmiennego obiektu (tj. Listy lub dyktowania), ponieważ będzie to jeden obiekt używany jako wartość dla każdego klucza w słowniku (sprawdź, czy dla tego przypadku jest dostępne rozwiązanie here). Numery/ciągi są bezpieczne.
Jedyny sposób pytony. – SilentGhost
To wydaje się być czystsze (przynajmniej dla mnie), jak to porównać z Timem? – blahster
Rozwiązanie Tima działa dla dowolnych wartości domyślnych (możesz zainicjować słownik z pustą listą lub obiektem datetime lub czymkolwiek). W moim rozwiązaniu można go zainicjować tylko za pomocą niezmiennych obiektów (int/float, string, ...). Jest bardziej pytonowo dla twojego przypadku (domyślna wartość to 0) i prawdopodobnie jest również szybsza. – eumiro
w Pythonie wersji> = 2,7 i w python 3:
d = {el:0 for el in a}
wyrażenia Generator uniknąć napowietrznej pamięci wypełniania całą listę. –
Powinieneś prawdopodobnie promować ten komentarz w swojej aktualnej odpowiedzi. Również z Pythona 2.7 i Pythona 3 możesz zrobić '{el: 0 dla el w a}. (Dodaj to również do swojej odpowiedzi.) – Zooba