如果设置为None,如何检查字典中的多个键?

时间:2014-07-11 20:59:43

标签: python dictionary

我有以下哪些方法有效,但我希望看到更清洁或pythonic的方式来做到这一点。

if options_dict['cids'] is not None and options_dict['mergekeys'] is not None:
   # do something

如果按键'以上将会解决问题。和' mergekeys'存在。有没有更好的方法来做到这一点?此外,我如何同时检查以下内容。

if options_dict['cids'] is None and options_dict['mergekeys'] is None:
   # do something

如果我能以优雅的方式在同一个if语句中结合上述两个内容,那将是非常棒的。

4 个答案:

答案 0 :(得分:3)

您可以随时使用allgenerator expression

if all(options_dict[x] is not None for x in ('cids', 'mergekeys')):

虽然我个人认为您当前的解决方案更好。它比这个更清晰,更有效。

如果您的长度是问题,那么您可以简单地将其分解为多行:

if options_dict['cids'] is not None and 
    options_dict['mergekeys'] is not None:

或者,为字典命名:

dct = options_dict
if dct['cids'] is not None and dct['mergekeys'] is not None:

all和生成器表达式解决方案只应用于检查更多的密钥而不仅仅是两个或三个。

答案 1 :(得分:1)

使用列表推导来制作bool的列表,告诉相应的选项是None

nones = [ options_dict[i] is None for i in [ 'cids', 'mergekeys' ] ]

然后,您可以使用anyall谓词来测试是否有None

if not any(nones):
    # not a single one was none

elif all(nones):
    # all were nones

答案 2 :(得分:0)

这是我可能做的事情:

>>> from operator import itemgetter
>>> my_dict = {"hey": 1, "ho": 2, "let's": 3, "go": None}
>>> my_keys = "hey", "ho"
>>> my_values = itemgetter(*my_keys)
>>> my_values(my_dict)
(1, 2)
>>> None not in my_values(my_dict)
True
>>> my_keys = "let's", "go"
>>> my_values = itemgetter(*my_keys)
>>> my_values(my_dict)
(3, None)
>>> None not in my_values(my_dict)
False

答案 3 :(得分:0)

第二个孤立的最佳方式是:

if options_dict['cids'] is options_dict['mergekeys'] is None:

虽然亲自派遣我会这样做:

# give meaningful name
flags = (options_dict['cids'] is None, options_dict['mergekeys'] is None)

if all(flags):
    ...

if not any(flags):
    ...

else:
    ...
相关问题