代码不会遍历整个字典

时间:2014-09-05 04:03:42

标签: python loops dictionary

所以我有以下功能:

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 (因为它永远不会到达那里)。

问题是什么?我似乎无法指责它。

1 个答案:

答案 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())