python - 如何在给定虚线路径的对象上设置属性?

标签 python

给定一个对象,它可以是类字典或类数组对象的嵌套结构。在给定点路径作为字符串的情况下,在该对象上设置值的 pythonic 方法是什么?

例子:

obj = [
    {'a': [1, 2]},
    {'b': {
        'c': [3, 4],
    }},
]

path = '1.b.c.0'

# operation that sets a value at the given path, e.g.
obj[path] = 5

# or
set_value(obj, path, 5)

上面的调用/赋值应该用 5 替换示例中的 3

注意:路径可以包含列表索引和键。对象的每个级别都可以是 arraydict 或类似行为的东西。

解决方案应该大致像什么npm包object-path在 javascript 中执行。

最佳答案

非递归版本,也适用于数字字典键:

from collections.abc import MutableMapping

def set_value_at_path(obj, path, value):
    *parts, last = path.split('.')

    for part in parts:
        if isinstance(obj, MutableMapping):
            obj = obj[part]
        else:
            obj = obj[int(part)]

    if isinstance(obj, MutableMapping):
        obj[last] = value
    else:
        obj[int(last)] = value

关于python - 如何在给定虚线路径的对象上设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51876885/

相关文章:

python - 尝试通过 API 将成员添加到 Google 群组时获取 'Missing required field: member'

python - 列出 Google 云端硬盘文件时出错

python - 如何在python中拟合三个高斯峰?

python - 如何使用 matplotlib 的动画编写器加速 MP4 的生成?

python - 我可以将 map/imap/imap_unordered 与不带参数的函数一起使用吗?

python - DBus 对象错误

来自文件的 Python 正则表达式表创建器

python - 为什么在 Python 的 JSON 编码中出现 UnicodeDecodeError?

python - numpy.einsum 的输出形状

python - Python 中的静态类型检查工具