繁体   English   中英

如何在 Python 的 dict 中获取 dict 的路径?

[英]How do I can get path for dict in dict in Python?

有通过添加一些数据生成的字典:

some_dict = {'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {}}}

我知道我可以使用 update 方法添加一些数据:

some_dict['dict1']['bar'].update({'some_key': value})

但是,如果部分代码不知道更新“栏”的正确方法怎么办? 喜欢:

some_dict[???]['bar'].update({'some_key': value})

我怎样才能正确更新它?

所以我想澄清你的问题。 问题是您在字典中有一个字典(即overall_dict = {..., 'inner_dict': {'foo': 4 }} ),而您想要的是 function 更新 'foo' 而无需传入overall_dict 即下面的function

def func1(dict): 
   dict['foo'] = 6

如果是这样的话,那么问题就不是太大了。 Python 使用指针,因此如果你传递func1(overall_dict['inner_dict'])那么它会做你想做的事。 本质上,您可以设置一个变量以指向内部字典。 当您更新新变量时,它也会更新overall_dict

我希望这会有所帮助。 如果您想知道其他 python 字典问题, pythontutor.com

我的测试以确保 python 是指针在这里

这也是一本非常好的 python 教科书:链接在这里

希望有帮助。

据我所知,没有标准的 Python function 可以做你想做的事。 您将需要自己实现某种搜索算法。 一般来说,您可以在深度优先搜索广度优先搜索策略之间进行选择。

前者的可能实现方式如下:

some_dict = {'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {}}}

def get_nested_dict(d, name):
    stack = [d]
    while stack:
        for k, v in stack.pop().items():
            if k == name:
                return v

            if isinstance(v, dict):
                stack.append(v)


print(some_dict)
get_nested_dict(some_dict, 'bar')['new'] = 1
print(some_dict)

生产:

{'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {}}}
{'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {'new': 1}}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM