如何在 Python 中安全地存取嵌套字典值

Barbara Streisand
發布: 2024-10-18 13:06:30
原創
313 人瀏覽過

How to Safely Access Nested Dictionary Values in Python

安全存取巢狀字典值

在Python 中,如果鍵不存在,從巢狀字典擷取值有時會導致異常。本文探討了安全存取這些值的各種方法。

使用 Try-Catch 異常處理

傳統方法是將存取操作包裝在 try- except 區塊中。如果遇到缺少鍵,則處理異常,並且程式碼繼續執行:

<code class="python">try:
    example_dict['key1']['key2']
except KeyError:
    pass</code>
登入後複製

但是,此方法需要對每一層巢狀重複進行鍵檢查,這可能會變得很麻煩。

連結get() 呼叫

Python 為字典提供了get() 方法,該方法傳回與鍵關聯的值,如果鍵不存在,則傳回None 。此方法可以多次連結以安全地存取嵌套值:

<code class="python">example_dict.get('key1', {}).get('key2')</code>
登入後複製

如果缺少任何中間鍵,此方法將傳回None,但如果與鍵關聯的值是,它仍然可以引發AttributeError不是字典或具有get() 方法的類似字典的物件。

使用Hasher Recipe

為了避免KeyError 和AttributeError,可以實作Hasher Recipe,它建立一個繼承自dict 的自訂類別並覆寫__missing__() 方法:

<code class="python">class Hasher(dict):
    def __missing__(self, key):
        value = self[key] = type(self)()
        return value</code>
登入後複製

使用此類,丟失的鍵將始終返回一個空的Hasher,從而允許安全地導航嵌套結構:

<code class="python">example_dict = Hasher()
print(example_dict['key1']['key2'])  # {}</code>
登入後複製

Safeget 輔助函數

最後,我們可以建立一個輔助函數來隱藏安全值檢索的複雜性:

<code class="python">def safeget(dct, *keys):
    for key in keys:
        try:
            dct = dct[key]
        except KeyError:
            return None
    return dct</code>
登入後複製

此函數簡化了存取語法,減少了程式碼混亂:

<code class="python">safeget(example_dict, 'key1', 'key2')</code>
登入後複製

總之,雖然Python 沒有提供用於安全存取巢狀字典值的內建方法,但所提出的技術提供了各種選項來處理缺失值鍵並防止異常處理開銷。

以上是如何在 Python 中安全地存取嵌套字典值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板