簡體   English   中英

在嵌套字典中查找值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM