不匹配 defaultdict 中的值
Match does not occur against value in defaultdict
for v in temp_var_dict['PSE2']:
#print(v)
match = str(match)
match = match.strip("[]")
match = match.strip("''")
print(f'** match={match} v={v} **')
result = [index for index, value in enumerate(v) if match in value]
我希望在比较下面的结果时看到匹配项。在我看来 match=1/2 和 v=1/2/CPU0 应该匹配并设置 'result'=0。但它并没有发生。请就正确的语法提出建议。
** 匹配=1/2 v=0/7/CPU0 **
** 匹配=1/2 v=1/0/CPU0 **
** 匹配=1/2 v=1/2/CPU0 **
defaultdict(, {'PSE1': ['0/0/CPU0', '1/3/CPU0'], 'PSE2': ['0/7/CPU0', '1/0/CPU0' , '1/2/CPU0'], 'IF_PSE1': [['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'] ]})
我认为,不完全确定,如果有匹配项,您要查找的是子字符串的起始索引。例如,如果 v = '1/2/CPU0' 并且 match = '1/2'
有一个匹配项,子字符串“1/2”从索引“0”开始,所以结果=0
不确定您的逻辑有什么问题,但 str.find(substring) 在这种情况下是您的朋友。如果未找到匹配项,它将 return -1,如果找到匹配项,它将是子字符串的起始索引。
查看下面代码的修改 'working' 版本:
temp_var_dict = {'PSE1': ['0/0/CPU0', '1/3/CPU0'], 'PSE2': ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0'], 'IF_PSE1': [['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO']]}
match = "1/2"
for v in temp_var_dict['PSE2']:
match = str(match)
match = match.strip("[]")
match = match.strip("''")
result = v.find(match)
print "match={%s} v={%s} result={%s}" % (match,v,str(result))
for v in temp_var_dict['PSE2']:
#print(v)
match = str(match)
match = match.strip("[]")
match = match.strip("''")
print(f'** match={match} v={v} **')
result = [index for index, value in enumerate(v) if match in value]
我希望在比较下面的结果时看到匹配项。在我看来 match=1/2 和 v=1/2/CPU0 应该匹配并设置 'result'=0。但它并没有发生。请就正确的语法提出建议。
** 匹配=1/2 v=0/7/CPU0 **
** 匹配=1/2 v=1/0/CPU0 **
** 匹配=1/2 v=1/2/CPU0 ** defaultdict(, {'PSE1': ['0/0/CPU0', '1/3/CPU0'], 'PSE2': ['0/7/CPU0', '1/0/CPU0' , '1/2/CPU0'], 'IF_PSE1': [['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'] ]})
我认为,不完全确定,如果有匹配项,您要查找的是子字符串的起始索引。例如,如果 v = '1/2/CPU0' 并且 match = '1/2' 有一个匹配项,子字符串“1/2”从索引“0”开始,所以结果=0
不确定您的逻辑有什么问题,但 str.find(substring) 在这种情况下是您的朋友。如果未找到匹配项,它将 return -1,如果找到匹配项,它将是子字符串的起始索引。
查看下面代码的修改 'working' 版本:
temp_var_dict = {'PSE1': ['0/0/CPU0', '1/3/CPU0'], 'PSE2': ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0'], 'IF_PSE1': [['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO'], ['TenGigE1/2/0/25.201', 'PSE2=NO', 25, 'TenGigE1/2', 'REPLICATION=NO']]}
match = "1/2"
for v in temp_var_dict['PSE2']:
match = str(match)
match = match.strip("[]")
match = match.strip("''")
result = v.find(match)
print "match={%s} v={%s} result={%s}" % (match,v,str(result))