Python字典键值比较

时间:2021-07-14 15:06:06

标签: 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_idregresistration_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_data1reg_data2 都返回 Truereg_data2 应该返回 False 作为 { {1}} reg_data2ven_name 中不存在。最终我试图使用 VENS 函数返回 find_ven & ven_id else registration_id

两者都返回False

True

感谢任何提示

2 个答案:

答案 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