Jak skonstruować domyślny słownik ze słownika?


88

Jeśli mam, d=dict(zip(range(1,10),range(50,61)))jak mogę zbudować collections.defaultdictz dict?

defaultdictWydaje się, że jedynym argumentem jest funkcja fabryczna, czy będę musiał zainicjować, a następnie przejść przez oryginał di zaktualizować defaultdict?

Odpowiedzi:


99

Przeczytaj dokumentację :

Pierwszy argument zawiera początkową wartość atrybutu default_factory; domyślnie Brak. Wszystkie pozostałe argumenty są traktowane tak samo, jak gdyby zostały przekazane do konstruktora dict , w tym argumenty słów kluczowych.

from collections import defaultdict
d=defaultdict(int, zip(range(1,10),range(50,61)))

Lub mając słownik d:

from collections import defaultdict
d=dict(zip(range(1,10),range(50,61)))
my_default_dict = defaultdict(int,d)

3
Czy możliwe jest rozszerzenie tego podejścia na dykty zagnieżdżone? Poniższe nie działa zgodnie z przeznaczeniem: default_dict = defaultdict(None,{"a":1,"b":{"c":3}})na przykład default_dict["e"]wywołuje KeyError zamiast zwracać None
alancalvitti

4
@alancalvitti to dlatego, że przekazanie Nonenie oznacza, że ​​wygeneruje None dla nieznanych kluczy, w ogóle go nie użyje. Musisz to zrobićdefaultdict(lambda: None, {....})
Eric Darchis

3

Możesz skonstruować defaultdict z dict, przekazując dict jako drugi argument.

from collections import defaultdict

d1 = {'foo': 17}
d2 = defaultdict(int, d1)

print(d2['foo'])  ## should print 17
print(d2['bar'])  ## should print 1 (default int val )

Której wersji Pythona używasz? Domyślna wartość int dla mnie w Pythonie 3.8.3 to 0, a nie 1.
shmulvad

0

defaultdict jest metodą z kolekcji, która nie zwraca błędu klucza, gdy element nie jest obecny.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.