Подтвердить что ты не робот

Не defaultdict (None)

Я хочу иметь словарь, содержащий набор переходов состояний. Я предположил, что могу сделать это, используя states = defaultdict (None), но не работает так, как я ожидал. Например:

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

Я бы подумал, что состояния [ "State 1" ] вернут значение None и что если new_state - это bool, который я получил бы False для new_state!= states [ "State 1" ], но вместо этого я получаю KeyError.

Что я делаю неправильно?

Спасибо,

Barry

4b9b3361

Ответ 1

defaultdict требуется аргумент, вызываемый как аргумент, который предоставляет значение по умолчанию при вызове без аргументов. None не является вызываемым. Что вы хотите, так это:

defaultdict(lambda: None)

Ответ 2

В этом случае использования не используйте defaultdict вообще - простой dict будет просто отлично:

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

Метод dict.get() возвращает значение для заданного ключа или значение по умолчанию, если ключ не найден. По умолчанию значение по умолчанию равно None.

Ответ 3

Думаю, я тоже мог бы это сделать:

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

Но я предпочитаю метод defaultdict.

Ответ 4

Чтобы получить None из states["State 1"] без использования .get() вы можете defaultdict с типом None - NoneType:

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