我想知道是否可以获得与此代码相同的输出:
d = {'a':None,'b':'12345','c':None}
nones=False
for k,v in d.items():
if d[k] is None:
nones=True
或
any([v==None for v in d.values()])
但没有for循环迭代器或生成器?
答案 0 :(得分:10)
您可以使用
nones = not all(d.values())
如果所有值都不是None,则将nones设置为False,否则设置为True。它只是一个抽象,在内部它必须迭代值列表。
答案 1 :(得分:7)
你可以让Python使用ForeignKey在C代码中进行循环;这会对所有值进行成员资格测试而不创建新列表:
dict.values()
在Python 3中,>>> d = {'a': None, 'c': None, 'b': '12345'}
>>> None not in d.viewvalues()
False
也返回字典视图。
Python 2上的演示:
any()
这将遍历值,直到找到匹配,就像列表成员资格或正确的any()
测试一样,使其成为O(N)测试。这不同于字典或集合成员资格测试,其中散列可用于平均为您提供固定成本测试。
你没有正确使用[...]
;删除if any(v is not None for v in d.itervalues()): # Python 3: use d.values()
括号:
inverse_index = {}
for key, value in d.items():
inverse.setdefault(value, set()).add(key)
如果您的目标是测试某些值,和,则需要避免每次测试的常量循环,请考虑创建一个反向索引:
if None not in inverse_index:
但是,这需要值可以清除。您现在可以简单地测试每个值:
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
在O(1)时间。