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

时间:2013-06-16 22:52:00

标签: 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"

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

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

4 个答案:

答案 0 :(得分:9)

你需要found标志,因为一旦for循环结束,你就无法确定它是否已停止,因为你突然爆发,或者循环因为循环而自行停止整个清单。

Python实际上有一个更简洁的方法来使用else块,您可能会发现它更容易理解:

for item in list:
    if item[0] == key:
        print item[1]
        break
else:
    print "Value not in list"

else块中的代码只有在break没有出现循环时才会被执行,如果你找不到这个词,就会发生这种情况。

此外,你在这里所拥有的不是字典。这是一个清单。您可能想要使用实际字典:

words = {
    "dog": "der Hund",
    "cat": "die Katze",
    "bird": "der Vogel"
}

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

key = 'dog'

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

答案 1 :(得分:4)

尝试在没有找到行的情况下运行代码。您会注意到它具有以下输出:

die Katze
Value not in list

找到的变量用于确保仅在未找到值时才打印出“不在列表中的值”字符串。否则,每次都会打印出来。

答案 2 :(得分:1)

此代码:

 if not found:
    print "Value not in list"
如果你没有将found设置为True,那么

将无效,如果你没有设置found,它会在找到 时运行首先是False(或其他一些假y值)。

答案 3 :(得分:0)

代码试图查找单词Cat是否是列表'list'的任何子列表中的第一项。它通过首先设置found = false然后迭代直到找到一个,然后设置found = true来实现这一点。

在python中,布尔常量是True和False,不是true和false,所以我不确定这是否有效。此外,还有一些更好的方法可以解决这个问题,例如:

catLists = [sub_list for sub_list in list if sub_list [0] == 'Cat']

这将返回列表中以Cat。开头的所有列表。