在Python什麼是做到這一點的最有效的方式返回None:訪問字典鍵,如果不存在
my_var = some_var['my_key'] | None
即。如果some_var
包含'my_key'
,則將some_var['my_key']
分配給my_var
,否則將my_var
設爲None
。
在Python什麼是做到這一點的最有效的方式返回None:訪問字典鍵,如果不存在
my_var = some_var['my_key'] | None
即。如果some_var
包含'my_key'
,則將some_var['my_key']
分配給my_var
,否則將my_var
設爲None
。
Python會拋出一個KeyError
如果密鑰在字典中不存在,那麼您不能以與JavaScript相同的方式編寫代碼。但是,如果您正在使用與您的示例中的字典專用的操作,則有一個非常好的功能mydict.get('key', default)
,它試圖從字典中獲取密鑰,並在密鑰不存在時返回默認值。
如果您只是想默認爲None
,則不需要顯式傳遞第二個參數。
根據您的字典包含的內容以及期望訪問未設置密鑰的頻率,您可能還有興趣使用collections
包中的defaultdict
。這需要一個工廠,並使用它來從__missing__
魔法方法返回新值,只要您訪問沒有明確設置的密鑰。如果您的字典只包含一種類型,它特別有用。
from collections import defaultdict
foo = defaultdict(list)
bar = foo["unset"]
# bar is now a new empty list
N.B.該文檔(對於2.7.13)聲稱,如果您沒有將參數傳遞給defaultdict
,它將爲未設置的密鑰返回None
。當我嘗試它時(在2.7.10上,這正是我碰巧安裝的),沒有奏效,我收到了KeyError
。因人而異。或者,您可以使用lambda:defaultdict(lambda: None)
**當您訪問字典中不存在的密鑰時,將引發KeyError **。 – farthVader 2014-12-19 09:31:38
try:
my_var = some_var
except:
my_var = None
不過說實話這可能不會得到你正在試圖做什麼的心臟......我們需要更多方面更充分地回答。
我只是添加了一個說明 - some_var實際上是一個字典,我想確保密鑰存在於其中否則使用無 – 2012-02-14 22:25:27
在python「|」被翻譯成 「或」,所以:
my_var = some_var或無
編輯: 編輯完你的初始後。做你想做什麼正確的方法是:
my_var = some_var.get('my_key', None)
無是無用的,默認爲無 - > http ://docs.python.org/library/stdtypes.html#typesmapping – Fred 2012-02-14 22:44:33
這只是一個例子來說明使用dict.get。 – 2012-02-15 16:59:27
您正在尋找的dict
的get()
方法。
my_var = some_var.get('some_key')
的get()
方法將返回與'some_key'
相關聯的值,如果這樣的值存在。如果密鑰不存在,則返回None
。
假設some_var
是一本字典,你需要dict.get()
:
my_var = some_var.get('my_key')
這一結果默認爲None
,如果my_key
丟失,但是您可以提供不同的默認:
my_var = some_var.get('my_key', default)
.get()
方法的優點是您可以實際定義要返回的值,以防鑰匙不存在。
my_dict = { 1: 'one', 2: 'two' }
print my_dict.get(3, 'Undefined key')
會打印。
Undefined key
這不僅是爲了調試的目的,同時也解析JSON時(以我的經驗,至少)非常有幫助,你應該更喜歡使用get()
超過[]
儘可能。
你是什麼意思「如果它存在」?在某些情況下,可能會定義'some_var'這個名字? – 2012-02-14 22:22:08
我剛剛編輯它 - 澄清 - 我試圖檢查在字典中的一個關鍵的存在本質上 – 2012-02-14 22:24:45
我敢打賭,這已被問...... – 2012-02-14 22:27:44