访问列表/目录的任意嵌套结构中的元素

2024-10-03 23:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有python列表和字典的嵌套结构。你知道吗

tree = { 'blah': [ "booz", {'foobar': [ { 'somekey': 'someval' } ] } ] }

我还有几个递归函数,允许我从上到下遍历tree层次结构,并返回所需的键和值。例如:

def get_objectcontent(obj, objid):

    result = None

    if isinstance(obj, dict):
        for key, val in obj.items():
            if key == objid:
                result = val
            elif isinstance(val, list) or isinstance(val, dict):
                retval = get_objectcontent(val, objid)
                if retval is not None:
                    result = retval
    elif isinstance(obj, list):
        for elem in obj:
            if isinstance(elem, list) or isinstance(elem, dict):
                retval = get_objectcontent(elem, objid)
                if retval is not None:
                    result = retval

    return result

不幸的是,我也想修改tree中的数据,这就是问题所在。我能看到的唯一可能的解决方案是在遍历tree时动态构造元素的“路径”,并构造如下内容:

tree['blah'][1]['foobar'][0]['somekey']) = 'newval'

我没有找到任何方法来指出Python中的键(当我知道它在结构中的位置时)。你知道吗

在Python3中有没有其他更智能的方法来解决这个问题?你知道吗


Tags: nonetreeobjgetifvalresult结构
1条回答
网友
1楼 · 发布于 2024-10-03 23:19:19

您最终将objid作为dict中的键,因此可以更改:

result = val

收件人:

result = obj

然后调用方可以执行以下操作:

result[objid] = new_val

您还可以考虑用return语句替换对result的赋值,前提是您不介意获取第一个实例而不是最后一个实例。你知道吗

相关问题 更多 >