Python:If循环难以理解

时间:2019-03-02 22:16:07

标签: python

我正在修改一个小的脚本来读取序列号,而我在努力寻找解决方案,为什么脚本会如此工作。我的目标是输入一个序列号,并将其与列表中的内容进行比较。 config_parameters -当内容匹配时,它应该打印出test1(仅用于测试目的):< / p>

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-function)。

例如,当我输入 123 作为序列号(将安全保存为 sn_input )时,该序列号就是列表中元素的一部分config_parameters ,我会打印错误。那就是我要坚持的地方:为什么 123 存在于列表中,为什么还要进入else语句?即使我尝试输入完整的条目,也很容易打印出错误。为什么会达到这个目的,我该如何解决呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

您只需要测试输入是否与字典中的serial_number项之一匹配,而不是整个字典即可。

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