所以我有以下功能:
def check(g,s):
for keys, value in g.items():
for w, val in enumerate(g[keys]):
print(s, g[keys][w], w)
if(s==g[keys][w]):
return 1
else:
return 0
g
是一个字典,其中一个整数作为键,一个列表作为值s
是我在值列表中寻找的整数我有以下数据(一个字典,其中一个整数作为键,一个列表作为一个值):
d={1.4953487812212205: [1, 1.2228445449938519], 2.23606797749979: [2, 1.4953487812212205], 3.309750919646873: [3, 1.8192720851062585]}
数据实际上要长得多,但为了简单起见我减少了数据。
check
函数正在字典中的每个键的列表中查找特定值并返回1或0.现在问题是我是否将代码作为独立运行(固定字典)并运行检查功能),代码工作正常(如果我搜索3
,它将返回1
)。
但是如果我将它集成到我的更大代码中,w
变量永远不会增加,它也只检查第一个字典条目(只有1个键)而不是所有它们,它永远不会找到3
(因为它永远不会到达那里)。
问题是什么?我似乎无法指责它。
答案 0 :(得分:4)
在检查完所有值之前,不要返回0:
def check(g,s):
for keys, value in g.items():
for w, val in enumerate(g[keys]):
print(s, g[keys][w], w)
if(s==g[keys][w]):
return 1
return 0
由于您正在迭代items(),因此您不必使用键重新查找值:
def check(g,s):
for keys, value in g.items():
for w, val in enumerate(value):
print(s, val, w)
if(s==val):
return 1
return 0
如果您使用任何嵌套生成器,您可以完成同样的事情(只需查看dict的值()集合,因为您似乎并不关心密钥是什么):< / p>
def check(g,s):
if any(s in vlist for vlist in g.values()):
return 1
else:
return 0
由于True = 1且False = 0,因此进一步减少为:
def check(g,s):
return any(s in vlist for vlist in g.values())