我的字典看起来像:
A = {
(0,0): [(0, 0), (1, 2), (3, 2)],
(1,1): [(2, 0)],
(10,1): [(0, 0), (2, 1)]
}
给定一个新元组,如何检查字典值中任何数组中是否存在元组(x0, y0)
?
我试图遍历列表
for i, v in iteritems(A):
if (x0, y0) in v:
return True
有没有办法让这个单线解决方案?
答案 0 :(得分:2)
使用any()
function并将循环放在生成器表达式中:
return any((x0, y0) in v for v in A.itervalues())
any()
函数一次一步地使生成器前进,并在True
测试返回true后立即返回(x0, y0) in v
(提前退出)。这意味着只完成最小工作量。
演示:
>>> A = {
... (0,0): [(0, 0), (1, 2), (3, 2)],
... (1,1): [(2, 0)],
... (10,1): [(0, 0), (2, 1)]
... }
>>> x0, y0 = 2, 0
>>> any((x0, y0) in v for v in A.itervalues())
True
>>> x0, y0 = 2, 42
>>> any((x0, y0) in v for v in A.itervalues())
False
答案 1 :(得分:0)
您可以执行以下操作:
do {
$token_id = makeRandomToken();
$token_key = makeRandomTokenKey();
} while (User::where("token_id", "=", $token_id)->where("token_key", "=", $token_key)->first() instanceof User);