2014-09-05 99 views
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 
      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变量不会增加,它也只检查第一个字典条目(而不是全部),它永远不会找到3(因为它永远不会到达那里) 。

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

直到你已经检查了所有的值

回答

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 

既然你迭代的项目(),你不必使用键重新查找值:

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 

如果你使用任何与嵌套生成器,你可以完成同样的事情(只要看看字典的值()集合,因为你似乎并不关心,关键是什么):

def check(g,s): 
    if any(s in vlist for vlist in g.values()): 
     return 1 
    else: 
     return 0 

而且,由于真= 1,假= 0,这进一步降低至:

def check(g,s): 
    return any(s in vlist for vlist in g.values()) 
+0

这是一个惊人的答案!谢谢。 – 2014-09-05 04:42:25