說我有一本字典,並且我想檢查一個密鑰是否映射到非空值。這樣做的一個方法是Len函數:檢查字典中的值是否定義/長度爲零的最Pythonic方法
mydict = {"key" : "value", "emptykey" : ""}
print "True" if len(mydict["key"]) > 0 else "False" # prints true
print "True" if len(mydict["emptykey"]) > 0 else "False" # prints false
然而,一個可以依靠的Python的語義,以及如何當一個對象被定義它的計算結果爲真,離開了LEN電話:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if mydict["key"] else "False" # prints true
print "True" if mydict["emptykey"] else "False" # prints false
但是,我不確定哪個更加Pythonic。第一種認爲「明確比隱含更好」,但第二種認爲「簡單比複雜更好」。
我還想知道,如果不使用len調用可能會咬我,因爲我正在使用的字典不一定包含字符串,但可能包含其他可用類型(列表,集合等)。 OTOH,前者(帶len調用)如果None被存儲爲值,則代碼將被炸燬,而非len版本將按預期工作(將被評估爲false)。
哪個版本更安全,更多Pythonic?
編輯:澄清假設:我知道關鍵是在字典中,我知道值是可以lenable的。我也無法避免將零長度值輸入詞典。
編輯#2:好像人們錯過了我的問題。我並不想以確定檢查的最Python化/最安全的方式,如果一個關鍵出現在一本字典,我想檢查是否值長度爲零或不
..並說:「如果與'key'關聯的值評估爲True,則執行某些操作」 - 但我的意圖是說「如果值的長度不是零」。分裂我想的頭髮。 –
@AdamParkin:嗯。那麼,如果你有一個長度不爲零的物體仍然被評估爲False,那麼這將是非常不尋常的......並且可能會被破壞。另一方面,如果你想防範沒有長度的對象(比如'int's)作爲合法值,那麼檢查'len(value)'就是你所有的東西。但是,除非你有一個很好的理由(例如數據傳輸/存儲等),否則這是一個壞主意。如果你走這條路線,確保你抓住了'TypeError'。 –