我有有效的代码,但我想知道是否有更多的 pythonic 方法来执行此操作。我有一本字典,我想看看是否:
- 存在一个键
- 该值不是 None(在这种情况下来自 SQL NULL)
- 该值不只是引用(空白?)
- 该值不仅仅由空格组成
所以在我的代码中,“a”、“b”和“c”的键会成功,这是正确的。
import re
mydict = {
"a":"alpha",
"b":0,
"c":False,
"d":None,
"e":"",
"g":" ",
}
#a,b,c should succeed
for k in mydict.keys():
if k in mydict and mydict[k] is not None and not re.search("^\s*$", str(mydict[k])):
print(k)
else:
print("I am incomplete and sad")
我上面的内容有效,但这似乎是一组非常长的条件。也许这只是正确的解决方案,但我想知道是否有更 pythonic 的“存在并且有东西”或更好的方法来做到这一点?
更新 谢谢大家的精彩回答和深思熟虑的评论。有了一些要点和技巧,我对问题进行了一些更新,因为有些条件我没有,但也应该成功。我还将示例更改为循环(更容易测试,对吧?)。
原文由 sniperd 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试获取值并将其存储在变量中,然后使用对象“truthyness”进一步处理该值
"a"
不在字典中,get
返回None
并且第一个条件失败"a"
is in the dict but yieldsNone
or empty string, test fails, if"a"
yields a blank string,strip()
returns falsy字符串,它也失败了。让我们测试一下:
结果:
如果您的值可以包含
False
,0
或其他“虚假”非字符串,您必须测试字符串,在这种情况下替换:经过
所以条件匹配如果不是
None
并且不是字符串(所有匹配)或者如果是字符串,则字符串不为空。