我有这种格式的数据:
reg_data1 = {
'request_id': 'bc94f069-ea3c-4465-8112-3a236b6ed8ea',
'profile_name': '2.0b',
'transport_name': 'simpleHttp',
'transport_address': 'None',
'report_only': False,
'xml_signature': False,
'ven_name': 'dan_test',
'http_pull_model': True
}
reg_data2 = {
'request_id': 'bc94f069-ea3c-4465-8112-3a236b6ed8ea',
'profile_name': '2.0b',
'transport_name': 'simpleHttp',
'transport_address': 'None',
'report_only': False,
'xml_signature': False,
'ven_name': 'dan_test_asdf',
'http_pull_model': True
}
我正在尝试创建一个函数 find_ven
以查看 ven_name
中是否存在 VENS
如果它确实存在返回 ven_id
和 regresistration_id
否则返回False
# Future db
VENS = {
"1": {"ven_name": "dan_test", "ven_id": "ven_id_dan_test", "registration_id": "reg_id_dan_test"},
"2": {"ven_name": "slipstream_ven1", "ven_id": "ven_id_slipstream_ven1", "registration_id": "reg_id_slipstream_ven1"},
"3": {"ven_name": "volttron_test", "ven_id": "ven_id_volttron_test", "registration_id": "reg_id_volttron_test"}
}
def find_ven(data):
print("TRYING TO LOOK UP VEN ",data['ven_name'])
for values in VENS.values():
#print(values['ven_name'])
if (values['ven_name']) in data['ven_name']:
print(f"found {values['ven_name']} in payload, looking to match {data['ven_name']}")
#return v['ven_id'],v['registration_id']
return True
else:
return False
有人可以告诉我我哪里出错了,因为 reg_data1
和 reg_data2
都返回 True
但 reg_data2
应该返回 False
作为 { {1}} reg_data2
在 ven_name
中不存在。最终我试图使用 VENS
函数返回 find_ven
& ven_id
else registration_id
两者都返回False
:
True
感谢任何提示
答案 0 :(得分:1)
其他人所说的是正确的,问题在于使用了 in
。但您也应该考虑将 return false
语句移到 for 循环之外,否则它永远不会遍历所有 VENS
条目。
def find_ven(data):
print("TRYING TO LOOK UP VEN ",data['ven_name'])
for values in VENS.values():
#print(values['ven_name'])
if (values['ven_name']) == data['ven_name']:
print(f"found {values['ven_name']} in payload, looking to match {data['ven_name']}")
#return v['ven_id'],v['registration_id']
return True
return False
答案 1 :(得分:0)
我让您的代码更易于阅读,您的问题是使用 in
而不是 ==
:
def find_ven(data):
print("TRYING TO LOOK UP VEN ",data['ven_name'])
ven_name = data['ven_name']
for v in VENS.values():
#print(values['ven_name'])
if v.get('ven_name') == ven_name:
print(f"found {v.get('ven_name')} in payload, looking to match {ven_name}")
#return v['ven_id'],v['registration_id']
return True
return False