首頁 > 後端開發 > Python教學 > 如何在 Python 中使用鍵列表高效存取和修改巢狀字典項目?

如何在 Python 中使用鍵列表高效存取和修改巢狀字典項目?

Barbara Streisand
發布: 2024-12-18 16:47:14
原創
215 人瀏覽過

How to Efficiently Access and Modify Nested Dictionary Items Using a Key List in Python?

使用鍵列表存取巢狀字典項目

處理複雜的字典結構時,遍歷它們以存取特定項目可能是一個常見的挑戰。找到一種有效且靈活的方法來瀏覽這些字典至關重要。

考慮一下您有一個巢狀字典的場景,例如:

dataDict = {
    "a": {
        "r": 1,
        "s": 2,
        "t": 3
    },
    "b": {
        "u": 1,
        "v": {
            "x": 1,
            "y": 2,
            "z": 3
        },
        "w": 3
    }
}
登入後複製

您可能需要使用以下列表來存取這些項目鍵,例如["a", "r"]或["b", "v", "y"]。雖然以下的方法可能有效:

# Get a given data from a dictionary with position provided as a list
def getFromDict(dataDict, mapList):
    for k in mapList:
        dataDict = dataDict[k]
    return dataDict
登入後複製

使用Python的reduce()存在更有效的方法:

from functools import reduce  # forward compatibility for Python 3
import operator

def getFromDict(dataDict, mapList):
    return reduce(operator.getitem, mapList, dataDict)
登入後複製

這種改進的方法利用reduce來遍歷字典,使用運算子.getitem 函數使用鍵列表存取每個巢狀項目。

對於設定值,我們可以利用getFromDict 來找到正確的值'parent' 字典,然後賦值:

def setInDict(dataDict, mapList, value):
    getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
登入後複製

此方法有效地遍歷字典到資料結構中的適當位置並更新值。

最後,我們可以提供Snake_case函數名稱並擴展這些函數以處理混合資料類型,從而產生:

from functools import reduce  # forward compatibility for Python 3
import operator

def get_by_path(root, items):
    return reduce(operator.getitem, items, root)

def set_by_path(root, items, value):
    get_by_path(root, items[:-1])[items[-1]] = value

def del_by_path(root, items):
    del get_by_path(root, items[:-1])[items[-1]]
登入後複製

這些函數提供了一種多功能實用程序,用於導航和操作嵌套字典、列表或兩者的混合。

以上是如何在 Python 中使用鍵列表高效存取和修改巢狀字典項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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