如何通过列表形式的路径变量操作Python嵌套字典?
解决嵌套字典路径定位并添加键值对的问题
我太懂这种困扰了!直接把路径列表当键用肯定不行,因为字典只会把整个列表(或转成的元组)当成单个键来查找,根本不会逐层深入嵌套结构。咱们换个思路,一步步遍历路径里的每一项,就能精准定位到你要操作的层级了。
最直接的实现方式:手动遍历路径
写个简单的循环就能搞定,逐层深入到目标对象:
my_dict = { "test": [ { "inner_test": [ { "name": "Jack" }, { "name": "Ann" } ] }, { "inner_test": [ { "name": "David" }, { "name": "Danny" } ], "some_test": [ 3, [ { "name": "Benny" }, { "name": "Ann" } ] ] } ] } test_var_2 = ['test',0,'inner_test',1] # 一步步走到目标层级 current = my_dict for key in test_var_2: current = current[key] # 现在current就是你要操作的那个字典,直接加键值对就行 current['country'] = 'a_country' # 验证一下结果 print(my_dict['test'][0]['inner_test'][1]) # 输出:{'name': 'Ann', 'country': 'a_country'}
封装成复用函数(更优雅)
如果以后还要多次处理类似的嵌套路径,把这个逻辑封装成函数会更方便:
def get_nested_object(data, path): current_item = data for key in path: current_item = current_item[key] return current_item # 调用函数定位目标 target_obj = get_nested_object(my_dict, test_var_2) target_obj['country'] = 'a_country'
为啥之前的方法不管用?
- 把
test_var_2转成元组后用my_dict[tuple(test_var_2)],相当于告诉字典“找一个键是('test',0,'inner_test',1)的项”,但你的字典里根本没有这个键,自然会抛出KeyError。 - 有些第三方库可能对嵌套结构的格式有要求,或者你没找对正确的调用方式,反而手动遍历这种基础方法更可靠、容易调试。
这样操作后,你就能通过路径变量自由操作任意嵌套深度的字典层级啦!
内容的提问来源于stack exchange,提问作者JustABeaver
相关产品推荐
相关产品推荐

