#python
Вопрос:
У меня есть данные, которые поступают в этом формате:
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
, так как reg_data2
ven_name
их не существует VENS
. В конечном счете, я пытаюсь использовать find_ven
функцию для возврата ven_id
amp; registration_id
else False
Оба возвращаются True
:
find_ven(reg_data1)
find_ven(reg_data2)
Любые советы приветствуются, спасибо
Комментарии:
1.
if (values['ven_name']) in data['ven_name']:
проблема в том, что он проверяет , является ли'dan_test'
подстрока'dan_test_asdf'
, которая истинна. Замените его,if values['ven_name'] == data['ven_name']:
и вы должны быть готовы к работе!
Ответ №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
Ответ №2:
Я сделал ваш код более удобным для чтения, ваша проблема заключалась в использовании 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
Комментарии:
1. Спасибо, я нажму зеленую галочку, когда смогу