Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中的dict中获取dict的路径?_Python - Fatal编程技术网

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

如何在Python中的dict中获取dict的路径?,python,Python,通过添加一些数据生成字典: some_dict = {'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {}}} 我知道我可以使用更新方法在那里添加一些数据: some_dict['dict1']['bar'].update({'some_key': value}) 但如果代码的一部分不知道更新“bar”的正确方法,该怎么办? 比如: 我怎样才能正确地更新它?所以我想澄清你的问题。问题是您在字典中有一个字典(即,totall_dict={

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

some_dict = {'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {}}}
我知道我可以使用更新方法在那里添加一些数据:

some_dict['dict1']['bar'].update({'some_key': value})
但如果代码的一部分不知道更新“bar”的正确方法,该怎么办? 比如:


我怎样才能正确地更新它?

所以我想澄清你的问题。问题是您在字典中有一个字典(即,
totall_dict={…,'internal_dict':{'foo':4}}
),您希望函数在不传入
totall_dict
的情况下更新'foo'?即下面的函数

def func1(dict): 
   dict['foo'] = 6
如果是这样的话,那就没有太大问题了。Python使用指针,因此如果您传递
func1(totally_dict['internal_dict'])
,那么它将执行您想要的操作。实际上,您可以设置一个变量来指向内部字典。当您更新新变量时,它还将更新
总目录

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

我的测试是通过指针来确保python是正确的

这也是一本非常好的python教科书:


希望有帮助

据我所知,没有标准的Python函数可以满足您的需要。您需要自己实现某种搜索算法。从广义上讲,你可以选择一种策略或一种策略

前者的一种可能实施方式是:

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}}}

注意,您不应该使用
.update
修改单个键。只需使用
some-dict[some-key]=some-value
您的意思是要通过
some-dict
搜索
bar
?或者你的意思是你想用一个变量来代替
?简而言之,你不能。您必须遍历整个字典以找到所需的键,或者维护另一个包含每个键路径的字典。无论如何,如果您不知道dict内容,那么您必须搜索数据结构。这并不理想。你应该构建你的程序,使其不必这样做。这听起来像是一个x-y问题。你想解决的真正问题是什么?gnahum,我会看看你提供的链接,事实上我选择的方式太复杂了。正在寻找其他方法来重新编写这部分代码。谢谢你的帮助。
{'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {}}}
{'some_value1': {}, 'dict1': {'qwerty': None, 'bar': {'new': 1}}}