2016-08-01 143 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更简单。尽管没有任何其他限制,但首先没有设置密钥似乎是最简单的。

相关问题