2011-10-25 37 views
30

我希望有一個包含一組狀態轉換的字典。我推測我可以使用states = defaultdict(None)來做到這一點,但它沒有像我期望的那樣工作。例如:defaultdict(無)

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

我本來以爲狀態[「國1」]將返回值無,如果NEW_STATE的是,我會得到虛假的NEW_STATE一個布爾值=狀態[「狀態1! 「],但是我得到一個KeyError。

我在做什麼錯了?

感謝,

巴里

回答

53

defaultdict需要調用當不帶參數調用,提供了默認值的參數。 None不可調用。你想要的是這樣的:

defaultdict(lambda: None) 
+7

不完全; 'None'實際上是'defaultdict()'的默認參數。但你的解決方案仍然不錯:) –

+0

@Tim:你說的對,但解決方案依然如此。 –

+0

[困惑]這裏的「不完全」是什麼?我錯過了之前未被系統保留的編輯嗎?我看不出比約恩的解釋或答案是不正確的。 –

0

我想我也可以這樣做:

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

但我更喜歡defaultdict方法。

9

在這種情況下使用,不要用defaultdict在所有 - 一個普通的dict會做得很好:

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

dict.get()方法返回給定鍵的值,或如果默認值鍵未找到。默認值爲默認值None