Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如果循环不可理解_Python - Fatal编程技术网

Python:如果循环不可理解

Python:如果循环不可理解,python,Python,我只是修改了一个小脚本来读取序列号,我正在努力找到解决方案,为什么脚本会这样运行。我的目标是,我键入一个序列号,并将其与列表配置参数中的内容进行比较-当内容匹配时,它应打印出test1,仅用于测试目的: sn_input = input("Enter Serial Number :") config_parameters = [ {'hostname': 'switch-a', 'domain_name': 'domain.local', 'management_ip': '10.0.0

我只是修改了一个小脚本来读取序列号,我正在努力找到解决方案,为什么脚本会这样运行。我的目标是,我键入一个序列号,并将其与列表配置参数中的内容进行比较-当内容匹配时,它应打印出test1,仅用于测试目的:

sn_input = input("Enter Serial Number :")
config_parameters = [
    {'hostname': 'switch-a', 'domain_name': 'domain.local', 'management_ip': '10.0.0.1', 'serial_number': '123'}, 
    {'hostname': 'switch-b', 'domain_name': 'domain.local', 'management_ip': '10.0.0.2', 'serial_number': '456'}, 
    {'hostname': 'switch-c', 'domain_name': 'domain.local', 'management_ip': '10.0.0.3', 'serial_number': '789'}, 
    {'hostname': 'switch-d', 'domain_name': 'domain.local', 'management_ip': '10.0.0.4', 'serial_number': '134'}
]


if sn_input in config_parameters:
    print('test1')
else:
    print('wrong')
另一个提示是:列表中的{}来自一个字典,该字典的内容已通过.append函数附加到列表中

例如,当我输入123作为序列号,它将被安全地作为sn_输入,这是列表配置_参数中元素的一部分时,我将得到错误的打印。这就是我结巴的地方:为什么它会转到else语句,尽管123存在于该列表中?即使我尝试输入完整的条目,它也会打印错误。为什么会这样?我该如何解决这个问题


提前谢谢

您只需测试输入是否匹配字典中的一个序列号项,而不是整个字典

if any(c['serial_number'] == sn_input for c in config_parameters):
    print("test1")
else:
    print("wrong")

config_参数是字典列表,而不是字符串列表。您希望输入如何匹配整个字典?你到底想匹配什么?123不在列表中,因为它是一个字典列表,本质上不是整数。您需要更深入一层:如果[item['serial_number']中的sn_input for config_parameters]:应该这样做,但这将非常低效,因为您在每次调用时都在构建列表。您可以将该列表转换为一个集合,但您仍在构建列表,然后在每次检查时转换为一个集合。你需要一个单独的数据结构来存储它。我给了你检查字典部分的代码,但理想情况下,你会有另一个集合,每当你遇到一个新的数字时,就添加到其中。你的字典列表没有问题,但当你想来检查会员资格时,它确实效率低下,我认为这是你经常做的事情。非常感谢你的回答和建议!