我是python的新手,正在学习它。我已经编写了在if
子句中满足所有三个条件时打印"utep"
值的代码,但我的代码正在打印results1
和else
子句中的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
您的每个数组results1
和results2
都有两个元素。因此,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")