2016-08-01 48 views
1

我經常發現自己正在檢查python中的字典,以查看字典中是否有密鑰,以及密鑰是否具有有用信息(在我的情況下是非零長度的字符串)。舉例來說,我似乎常常需要檢查kwargs像這樣的數據:如何確定字典中是否存在非空字符串?

if ('partition' not in kwargs or kwargs['partition'] is None 
    or kwargs['partition'] == ""): 
    raise Exception("Need 'partition' for this method") 

有沒有更簡單,直接的方式做到這一點,我很想念?

+3

'如果不是kwargs.get('分區'):' – idjaw

+0

如果密鑰不在kwargs字典中,它仍然有效嗎? – Randy

+0

所以你想確保即使'分區'鍵存在,它必須有東西? – idjaw

回答

1

使用Dictionary對象的get()方法,然後讓Python確定其truthiness自動:

if not d.get('partition'): 
    raise Exception("Need 'partition' for this method") 
+2

根據評論中的額外問題,我相信他們也想檢查密鑰的值是否也爲空。所以即使密鑰存在,它也必須有一些東西。等待OP在評論中確認。留意這一點。 – idjaw

+2

如果該值爲空字符串,則不會引發此問題。 'kwargs.get(「分區」,「」)是「」會的。 – freebie

+2

我不認爲明確演員是必要的。 Python已經做了一個隱含的強制 –

1

哪種方法是Python的可能取決於詞典內容是否是內部或外部接口。

如果你正在編寫一個庫,使用從命令行或文件中讀取的字典內容,或者類似程序員不負責內容的類似內容,你會想要做些什麼,已經在OP中寫入了良好的防守編程實踐。如果這是一個常見的成語足以在你的代碼,你可能需要編寫提供了類似的處理,同時在推廣,你要尋找的特定鍵,如功能:

def key_contains_contents(user_dict, key): 
    return (key in user_dict) and user_dict[key] and len(user_dict[key]) > 0 

根據需要添加額外的條款。

如果字典的內容是由程序本身創建的,那麼您可能想出一個標準方法來表示一個鍵是否包含有意義的數據並堅持。你正在解決的具體問題可能暗示着某種方式使代碼創建dict更簡單。儘管沒有任何其他限制,但首先沒有設置密鑰似乎是最簡單的。

相關問題