什么是检查 Python 中的 dict 对象中是否存在属性集合的好方法?
目前我们正在这样做,但似乎有更好的方法:
properties_to_check_for = ['name', 'date', 'birth']
for property in properties_to_check_for:
if property not in dict_obj or dict_obj[property] is None:
return False
非常感谢!
什么是检查 Python 中的 dict 对象中是否存在属性集合的好方法?
目前我们正在这样做,但似乎有更好的方法:
properties_to_check_for = ['name', 'date', 'birth']
for property in properties_to_check_for:
if property not in dict_obj or dict_obj[property] is None:
return False
非常感谢!
您可以使用all
生成器:
all(key in dict_obj for key in properties_to_check_for)
它会短路,就像你的for
循环一样。这是您当前代码的直接翻译:
all(dict_obj.get(key) is not None for key in properties_to_check_for)
d.get(key)
如果键不在您的字典中,将返回None
,因此您实际上不需要事先检查它是否在其中。
你可以使用any()
:
any(dict_obj.get(prop) is None for prop in properties_to_check_for )
property
如果在中找不到任何内容properties_to_check_for
或者它的值为 ,这将返回 True None
。
对于大型字典与大型列表比较,将set
返回的 -like 对象viewkeys
与 的set
版本进行比较properties_to_check_for
可能会带来性能优势
if dict_obj.viewkeys() >= set(properties_to_check_for):
定时测量:
timeit.timeit('dict_obj.viewkeys() >= set(properties_to_check_for)',
setup='dict_obj = dict(zip(xrange(100000), xrange(100000))); properties_to_check_for=xrange(10000)',
number=10000)
9.82882809638977
timeit.timeit('all(key in dict_obj for key in properties_to_check_for)',
setup='dict_obj =dict(zip(xrange(100000),xrange(100000)));properties_to_check_for=list(xrange(10000))',
number=10000)
12.362821102142334