defaultdict(无)

Baz*_*Baz 45 python

我希望有一个包含一组状态转换的字典.我假设我可以使用states = defaultdict(None)来执行此操作,但它不能按我的预期工作.例如:

states = defaultdict(None)
if new_state_1 != states["State 1"]:
    dispatch_transition()
Run Code Online (Sandbox Code Playgroud)

我原以为状态["State 1"]会返回值None,如果new_state是bool,我会为new_state获得False != states ["State 1"],但我得到一个KeyError.

我究竟做错了什么?

谢谢,

巴里

Bjö*_*lex 82

defaultdict需要一个可调用的参数,在没有参数的情况下调用时提供默认值.None不可赎回.你想要的是这个:

defaultdict(lambda: None)
Run Code Online (Sandbox Code Playgroud)

  • 不完全的; `None`实际上是`defaultdict()`的默认参数.但你的解决方案仍然很好:) (10认同)
  • ??? 咦?我同意None是defaultdict()的默认参数,但它的作用是导致defaultdict引发`KeyError`s而不是产生'None`值. (9认同)
  • @JasonS:我的回答表明用"无"作为参数调用"deafultdict"是行不通的,但事实确实如此. (2认同)
  • @JasonS:是的,但由于`None`*是*defaultdict`的有效参数,我的第一句话(*"`defaultdict`需要一个可调用的参数"*)严格来说是不正确的.这是一个细节,但仍值得注意. (2认同)

Sve*_*ach 10

在这个用例中,根本不要使用defaultdict- 普通dict会做得很好:

states = {}
if new_state_1 != states.get("State 1"):
    dispatch_transition()
Run Code Online (Sandbox Code Playgroud)

dict.get()方法返回给定键的值,如果未找到键,则返回默认值.默认值默认为None.