Chcę mieć słownik, który zawiera zestaw przejść państwowych. Przypuszczam, że mogę to zrobić za pomocą stanów = defaultdict (brak), ale nie działa, jak się spodziewałem. Na przykład:

states = defaultdict(None)
if new_state_1 != states["State 1"]:
    dispatch_transition()

Pomyślałbym, że stany ["Stan 1"] zwrócą wartość Brak i że jeśli New_state jest boolem, że otrzymałem fałszywe dla New_state! = Państwa ["State 1"] , ale zamiast tego dostaję keyerror.

Co ja robię źle?

Dzięki,

Barry

51
Baz 25 październik 2011, 12:04

3 odpowiedzi

Najlepsza odpowiedź

defaultdict Wymaga kłótni, który zapewnia wartość domyślną, gdy wywołano bez argumentów. None nie jest wywołany. Co chcesz, to:

defaultdict(lambda: None)
96
Björn Pollex 25 październik 2011, 08:08

W tym przypadku użytku nie używaj defaultdict - w ogóle - zwykły {x1}} zrobi dobrze:

states = {}
if new_state_1 != states.get("State 1"):
    dispatch_transition()

Metoda dict.get() zwraca wartość dla danego klucza lub wartości domyślnej, jeśli klucz nie zostanie znaleziony. Domyślna wartość domyślna do None.

11
Sven Marnach 25 październik 2011, 08:18

Chyba też mogłem to zrobić:

states = {}
...
if not new_state_1 in states or new_state_1 != states["State 1"]:
    dispatch_transition()

Ale wolę metodę defaultdict.

0
Baz 25 październik 2011, 08:17