我有一段代码,我在字典中迭代查找找到的关键字以及每个关键字被找到的次数。if语句工作,如果找到关键字,则返回预期的输出。然而,当没有找到关键字时,else语句不工作,它应该返回&;没有找到关键字&;。这似乎很简单,但我只是不能把我的手指为什么这是不工作。我对编码相当陌生,所以如果这看起来非常基础,我很抱歉。
下面是我使用的代码块:
with open(keyword_file_path, 'r') as file:
data = file.read()
kw_found = {}
for keyword in keywords:
found = re.findall(keyword, data, re.I)
if found:
kw_found[keyword] = len(found)
for key in kw_found.keys():
if key in kw_found.keys():
width = max(len(x) for x in key)
output_fp.write("{0:<{1}} : {2}n".format(key, width, kw_found[key]))
else:
output_fp.write("No Keywords Foundn")
if语句工作,如果找到预定义的关键字,我们得到以下输出:
dog: 5
cat: 2
bird: 100
如果没有找到关键字,应该返回"No keywords Found";然而,它没有返回任何东西。没有错误报告,所以如果我理解正确的话,它似乎永远不会看到else语句为True。
任何建议,让这个工作将非常感激!提前谢谢你!
for key in kw_found.keys():
上面一行将遍历kw_found.keys()
的每个元素,并将它们绑定到key。
if key in kw_found.keys():
这询问我们从kw_found.keys()
中看到的东西是否在kw_found.keys()
中-是的,它是。
width = max(len(x) for x in key)
output_fp.write("{0:<{1}} : {2}n".format(key, width, kw_found[key]))
下一行永远不会触发。如果kw_found.keys()
为空,它所在的块将永远不会触发。
else:
output_fp.write("No Keywords Foundn")
基本上,您将单独检查每个元素的列表遍历与处理整个列表的列表推导混合在一起。你几乎总是想用其中之一。此外,如果您想查看列表中的任何位置是否为真,您不希望在循环中使用if/else
块-它将正确计算true分支,但它将计算每个不匹配条件的元素的false分支(即使它在其他地方匹配)。这是令人困惑的&无处&;加上"不在这里">
观察到的行为是正确的。在代码中,将遍历所有检测到的关键字,这些关键字存储在kw_found中。然后你要检查当前关键字是否在你要迭代的字典中。这总是正确的。
我是新手,但我认为你的for循环应该通过keywords
迭代,而不是kw_found
。如果它只查看已找到的键,则If语句将始终是正确的,而else语句将永远不会执行。
下面是工作代码:
with open(keyword_file_path, 'r') as file:
data = file.read()
kw_found = {}
for keyword in keywords:
found = re.findall(keyword, data, re.I)
if found:
kw_found[keyword] = len(found)
for key in keywords.keys():
if key in kw_found.keys():
width = max(len(x) for x in key)
output_fp.write("{0:<{1}} : {2}n".format(key, width, kw_found[key]))
else:
output_fp.write("No Keywords Foundn")
else语句似乎在错误的循环中:
with open(keyword_file_path, 'r') as file:
data = file.read()
kw_found = {}
for keyword in keywords:
found = re.findall(keyword, data, re.I)
if found:
kw_found[keyword] = len(found)
else:
output_fp.write("No Keywords Foundn")
for key in kw_found.keys():
if key in kw_found.keys():
width = max(len(x) for x in key)
output_fp.write("{0:<{1}} : {2}n".format(key, width, kw_found[key]))
在使用了一段时间后,我终于得到了在kw_found字典为空时触发的else语句。现在,当文件中没有找到关键字时,我得到了else语句的预期输出。我感谢每个人的反馈和建议。
with open(keyword_file_path, 'r') as file:
data = file.read()
kw_found = {}
for keyword in keywords:
found = re.findall(keyword, data, re.I)
if found:
kw_found[keyword] = len(found)
if kw_found:
for key in kw_found.keys():
if key in kw_found.keys():
width = max(len(x) for x in key)
output_fp.write("{0:<{1}} : {2}n".format(key, width, kw_found[key]))
else:
output_fp.write("No Keyword Found n")