在dict中搜索键时,为什么需要将布尔条件设置为false

Dan*_*rex 0 python boolean

我想知道为什么下面的代码要求我们输入found = false,然后在if语句中找到= true.

def findinList():
  list = [["Dog" , "der Hund"] , ["Cat" , "die Katze"] , ["Bird" , "der Vogel"]]
  key = "Cat"
  found = false
  for item in list:
    if item[0] == key:
      print item[1]
      found = true
      break
  if not found:
    print "Value not in list"
Run Code Online (Sandbox Code Playgroud)

这是我(错误)的理解.如果item [0] == key(它确实),则if语句为true.所以它不应该在它打印项目后突破它吗?为什么我们需要found = false/true.

当你解释答案时,你可以用一个非常容易理解的定义解释它,因为我对这一切都是新手,太多的细节会导致我的理解中出现轻微的崩溃.

Ble*_*der 9

你需要这个found标志,因为一旦一个for循环结束,你就无法确定它是否已经停止了,因为你已经爆发了它,或者循环因为它循环遍及整个列表而自行停止.

Python实际上有一个更简洁的方法来执行此操作else,您可能会发现它更容易理解:

for item in list:
    if item[0] == key:
        print item[1]
        break
else:
    print "Value not in list"
Run Code Online (Sandbox Code Playgroud)

else只有在没有break循环的情况下才会执行块中的代码,如果您从未找到该单词,则会执行此操作.

此外,你在这里不是一本字典.这是一个清单.您可能想要使用实际字典:

words = {
    "dog": "der Hund",
    "cat": "die Katze",
    "bird": "der Vogel"
}
Run Code Online (Sandbox Code Playgroud)

您的代码将变得更加简单:

key = 'dog'

if key in words:
    print words[key]
else:
    print "{} isn't in the dictionary".format(key)
Run Code Online (Sandbox Code Playgroud)