[英]find value in nested dictionary
誰能給我一個關於如何找到一個名為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
{}
{}
>>>
您可以使用生成器表達式來查找第一個匹配值:
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
中的第二個參數是默認值
.values()
將返回類似於{'ven_id': 'ven_id_123', 'ven_name': 'ven123',...}
。 "ven_id_123"
不是這個 output。 因此,它轉到else
子句。 由於同樣的原因,您還必須更改if
子句中的ven_info[]
索引。
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'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.