如果循环正在打印"else"子句,即使不满足条件



我是python的新手,正在学习它。我已经编写了在if子句中满足所有三个条件时打印"utep"值的代码,但我的代码正在打印results1else子句中的UTEP值。

输入:

results1 = [{'asv': 'apache',
'qid': '110310',
'state': 'Approved - Pending Remediation',
'time': '2022-03-07T21',
'utep': 'UEXC0031327'},
{'asv': 'nginx',
'qid': '110310',
'state': 'Approved Pending Renewal',
'time': '2022-03-07T22',
'utep': 'UEXC0033886'}]
results2 = [{'ASV': 'apache', 'KB_QID': '110310', 'time': '2022-03-02T23'},
{'ASV': 'oracle', 'KB_QID': '100178', 'time': '2022-03-02T23'}]

代码:

for val1 in results1:
for val2 in results2:
if ((val1['qid'] == val2['KB_QID'] and val1['asv'] == val2['ASV'] and
val1['state'] == 'Approved - Pending Remediation') or
(val1['qid'] == val2['KB_QID'] and val1['asv'] == val2['ASV'] and
val1['state'] == 'Approved Pending Renewal')):
print (val1['utep'])
else:
print ("Not found")

输出:

UEXC0031327
Not found
UEXC0033886
Not found

期望输出:

UEXC0031327
Not Found

您的每个数组results1results2都有两个元素。因此,if语句运行4次。条件在2次执行中为True,在另外2次执行时为False

您想要的输出有两行。所以,我想你想把results1的第一个元素和results2的第一个元件进行比较,然后把results1的第二个元素和第二个元件results2进行比较。在这种情况下,您需要使用zip函数:

for each_value in zip(results1, results2):
if ((each_value[0]['qid'] == each_value[1]['KB_QID'] and each_value[0]['asv'] == each_value[1]['ASV'] and each_value[0]['state'] == 'Approved - Pending Remediation') or (each_value[0]['qid'] == each_value[1]['KB_QID'] and each_value[0]['asv'] == each_value[1]['ASV'] and each_value[0]['state'] == 'Approved Pending Renewal')):
print (each_value[0]['utep'])
else:
print ("Not found")

最新更新