首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板