谁能给我一个关于如何找到名为 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
{}
{}
>>>
答案 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'))