【问题标题】:Python check list of dictionaries for all None valuesPython 检查所有 None 值的字典列表
【发布时间】:2022-11-29 20:20:39
【问题描述】:

我有以下字典列表,当前包含 None 值:

[{'connections': None}, {'connections': None}, {'connections': None}]

我想遍历元素列表,检查每个字典中的每个“连接”键是否为 None ,如果是则返回 true 。我如何检查所有值是否为 None?

【问题讨论】:

标签: python-3.x list dictionary


【解决方案1】:

您可以使用生成器表达式和all 解压lst 中的所有dict 值并检查它们是否都是None:

out = all(x is None for d in lst for x in d.values())

输出:

True

【讨论】:

  • 这不会专门检查“连接”是否为“无”,它会检查是否全部每个字典中的值都是 None (从问题的措辞来看,这种区别是否相关并不是很清楚)。
  • 我编辑了主要问题,希望它更清楚。但是是的,在这种情况下,所有都必须是无。
【解决方案2】:

如果您希望在满足条件时进行静默检查:

dict_list = [{'connections': None}, {'connections': None}, {'connections': None}]
assert all( d['connections'] is None for d in dict_list), 'At least one connection value is not None'

如果不满足条件,则会引发 AssertionError 并显示上面的消息。否则这条线是通过的。

【讨论】:

  • 如果代码在启用优化的情况下运行,并且有一个字典,其中“连接”不是无,那么您将不会注意到。
  • @mkrieger1 事实上,如果此代码用于生产,if cond: raise Exception 是更好的做法
【解决方案3】:
list =[{'connections': None}, {'connections': None}, {'connections': 
None}]
for item in list:
if(item['connections']==None):
    return True

这里的 for 循环将获取每个元素,if 语句将检查数组中每个元素的键的值,因此如果它的 None 将返回 True。

【讨论】:

  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题。带有解释的答案通常更有帮助且质量更高,并且更有可能吸引赞成票。
  • 非常感谢。我下次会这样做
【解决方案4】:

这是您可以传递字典列表以检查包含所有 None 值的字典的函数。

def func(list):
    for dict in list:
        for key in dict:
            if dict[key] is not None:
                return False
    
    return True
print(func([{'connections': None}, {'connections': None}, {'connections': None}]))

【讨论】:

  • 虽然仅代码答案可能会回答问题,但您可以通过提供代码上下文、此代码有效的原因以及一些文档参考以供进一步阅读来显着提高答案的质量。来自How to Answer“简洁是可以接受的,但更全面的解释更好。”
【解决方案5】:

只需使用列表压缩,您就可以使用该字典中的关键“连接”

lst = [{'connections': None}, {'connections': None}, {'connections': None}]

if all([di.get('connections') == None for di in lst]):
    print("All dict connections value None value")
else:
    print("Some dict connections have not None value")

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2020-10-13
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多