在嵌套字典中查找值

时间:2021-06-02 15:48:54

标签: 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

{}
{}
>>> 

3 个答案:

答案 0 :(得分:2)

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

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 中的第二个参数是默认值

答案 1 :(得分:0)

.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 匹配,它将返回您想要的正确字典。否则为空字典。

答案 2 :(得分:0)

我在代码中做了一些修剪,我正在做的是使用 .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'))