I executed your suggestion below (removed if match). Then I got this error:
print([index for index, value in enumerate(v) if match in value])
TypeError: 'in <string>' requires string as left operand, not list
Now I converted both values 'v' and interface 'match' variables to string.
Now the result I see is the below. I am getting no matches at this point. In my case the output of 'interfaces' and 'CPU' is coming from an appliance. I am printing the original value for you to see it. So if I try the 'index', I get the error above complaining it requires a string. But then if I convert it to string, the operations with 'index' may no longer be valid, correct?
Original data from appliance, dictionary:defaultdict(<class 'list'>, {'PSE2': ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0']})
type of values v <class 'str'> ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0'] and type of interface:<class 'str'> ['0/5']
[]
Original data from appliance, dictionary:defaultdict(<class 'list'>, {'PSE2': ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0']})
type of values v <class 'str'> ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0'] and type of interface:<class 'str'> ['0/7']
[]
exit...
print([index for index, value in enumerate(v) if match in value])
TypeError: 'in <string>' requires string as left operand, not list
Now I converted both values 'v' and interface 'match' variables to string.
Now the result I see is the below. I am getting no matches at this point. In my case the output of 'interfaces' and 'CPU' is coming from an appliance. I am printing the original value for you to see it. So if I try the 'index', I get the error above complaining it requires a string. But then if I convert it to string, the operations with 'index' may no longer be valid, correct?
print (f'Original data from appliance, dictionary:{arch_dic}') for k, v in arch_dic.items(): v = str(v) match = str(match) print(f'type of values v {type(v)} {v} and type of interface:{type(match)} {match} ') print([index for index, value in enumerate(v) if match in value])#I am not getting a match:
Original data from appliance, dictionary:defaultdict(<class 'list'>, {'PSE2': ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0']})
type of values v <class 'str'> ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0'] and type of interface:<class 'str'> ['0/5']
[]
Original data from appliance, dictionary:defaultdict(<class 'list'>, {'PSE2': ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0']})
type of values v <class 'str'> ['0/7/CPU0', '1/0/CPU0', '1/2/CPU0'] and type of interface:<class 'str'> ['0/7']
[]
exit...
(Apr-07-2019, 09:59 PM)Yoriz Wrote:from collections import defaultdict arch_dic = {} arch_dic = defaultdict(list) arch_dic['PSE2'].append("0/7/CPU0") arch_dic['PSE2'].append("1/7/CPU0") arch_dic['PSE2'].append("0/7/CPU0") arch_dic['PSE2'].append("0/7/CPU0") arch_dic['PSE2'].append("1/7/CPU0") match='0/7' for k, v in arch_dic.items(): print (f'Interface:{match} CPU list:{v}') print([index for index, value in enumerate(v) if match in value])
Output:Interface:0/7 CPU list:['0/7/CPU0', '1/7/CPU0', '0/7/CPU0', '0/7/CPU0', '1/7/CPU0'] [0, 2, 3]if match in v
will only match if the whole string matches, the above will find any index with the partial sting in.