在嵌套字典中查找值

2024-09-28 03:13:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有谁能告诉我如何找到名为ven_id的嵌套字典键,以及如果它存在,如何返回整个嵌套字典值

ven1_id = 'ven_id_123'
ven2_id = 'ven_id_321'

def ven_lookup(ven_id):
     
     ven_info = {'ven1_info':
          {'ven_id': 'ven_id_123',
          'ven_name': 'ven123',
          'fingerprint': '7F:7F:7F:7F:7F:7F:7F:7F:7F:7F',
          'registration_id': 'reg_id_123'},

          'ven2_info':
          {'ven_id': 'ven_id_321',
          'ven_name': 'ven321',
          'fingerprint': 'G3:G3:G3:G3:G3:G3:G3:G3:G3:G3',
          'registration_id': 'reg_id_321'}
}
     
     look_up = ven_id in ven_info.values()
     if look_up:          
        return {'ven_id': ven_info['ven_id'],
                'ven_name': ven_info['ven_name'],
                'fingerprint': ven_info['fingerprint'],
                'registration_id': ven_info['registration_id']}
         
     else:
        return {}

   
print(ven_lookup(ven1_id))
print(ven_lookup(ven2_id))

如果我运行此命令,它将返回False

{}
{}
>>> 

Tags: nameinfoidreturn字典registrationreglookup
3条回答

.values()将返回沿{'ven_id': 'ven_id_123', 'ven_name': 'ven123',...}行的内容"ven_id_123"不是此输出。因此,它转到else子句。出于同样的原因,您还必须更改ven_info[]子句中的if索引

look_up = [ven for ven in ven_info.values() if ven['ven_id'] == ven_id]
if look_up != []:
    return look_up[0]
else:
    return {}

这将搜索ven_info的值,如果ven的id与传入参数的id匹配,它将返回所需的正确字典。否则,这是一个空的命令

我在代码中做了一些修改,我正在使用.keys()方法查看字典的每个键。对于每个键,我都会检查是否与输入字符串相等。 如果我找到了正确的匹配项,我只需将字典提取到结果变量并返回它

def ven_lookup(ven_id):
    result = {}
     
    ven_info = {'ven1_info':
        {'ven_id': 'ven_id_123',
        'ven_name': 'ven123',
        'fingerprint': '7F:7F:7F:7F:7F:7F:7F:7F:7F:7F',
        'registration_id': 'reg_id_123'},

        'ven2_info':
        {'ven_id': 'ven_id_321',
        'ven_name': 'ven321',
        'fingerprint': 'G3:G3:G3:G3:G3:G3:G3:G3:G3:G3',
        'registration_id': 'reg_id_321'}
    }
     
    for primary_key in ven_info.keys():
         if ven_info[primary_key]['ven_id'] == ven_id:
             result = ven_info[primary_key]
         
    return result
     
if __name__ == '__main__':
    print(ven_lookup('ven_id_123'))
    print(ven_lookup('ven_id_404'))
    print(ven_lookup('ven_id_321'))

可以使用生成器表达式查找第一个匹配的值:

def ven_lookup(ven_id):
     
     ven_info = {'ven1_info':
          {'ven_id': 'ven_id_123',
          'ven_name': 'ven123',
          'fingerprint': '7F:7F:7F:7F:7F:7F:7F:7F:7F:7F',
          'registration_id': 'reg_id_123'},

          'ven2_info':
          {'ven_id': 'ven_id_321',
          'ven_name': 'ven321',
          'fingerprint': 'G3:G3:G3:G3:G3:G3:G3:G3:G3:G3',
          'registration_id': 'reg_id_321'}
    }
    lookup = (v for v in venv.values() if ven_id in v)
    return next(lookup, {})

其中next中的第二个参数是默认值(如果未生成任何值)

相关问题 更多 >

    热门问题