如果字典中的多个键设置为“无”,如何检查它们?

2024-10-03 13:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下工作,但我想看到一个更干净或Python的方式来做这件事。你知道吗

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

如果键“cids”和“mergekeys”存在,则上述值将解析为true。有没有更好的方法来实现上述目标?另外,我怎样才能同时检查以下内容。你知道吗

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

如果我能以一种优雅的方式将以上两种语言组合在同一个if语句中,那就太棒了。你知道吗


Tags: and方法nonetrue目标ifis方式
3条回答

始终可以使用^{}generator 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和生成器表达式解决方案只应用于检查多于两个或三个键的键。你知道吗

我可能会这么做:

>>> 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

使用列表理解来制作一个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

相关问题 更多 >