如何动态访问并打印Python嵌套字典指定路径的键值?
问题
我正在尝试实现字典键值的动态打印功能。
示例代码如下:
print(data['waninfo']['1']['user']['_value']) ->"teste" print(data['waninfo']['1']['pw']['_value']) -> "teste123"
上述示例中,键'waninfo'和'1'是固定层级,我希望后续的键可以动态指定使用,参考写法如下:
fixedKey = "['user']['_value']" print(data['waninfo']['1']+fixedKey)
请问该如何正确实现该需求?
解决方案
字符串拼接键路径的写法无法直接生效,Python不会自动把字符串格式的键解析成字典索引操作,推荐用以下两种安全可维护的方式实现:
- 逐层遍历键列表取值
把动态部分的键拆成有序列表存储,从固定层级的字典对象开始逐层索引即可,修改路径只需要调整键列表内容:# 先取出固定层级的字典对象 base = data['waninfo']['1'] # 动态配置需要取的键路径 dynamic_path = ['user', '_value'] res = base for k in dynamic_path: res = res[k] print(res) # 输出teste # 切换取密码的路径 dynamic_path = ['pw', '_value'] res = base for k in dynamic_path: res = res[k] print(res) # 输出teste123 - 借助
reduce简化取值逻辑
可以用functools.reduce把逐层索引的逻辑收敛成一行写法,不需要手动写循环:from functools import reduce base = data['waninfo']['1'] dynamic_path = ['user', '_value'] res = reduce(lambda obj, key: obj[key], dynamic_path, base) print(res)
❗ 注意:严禁使用
eval()执行拼接后的字符串完成取值,这种方式存在严重的代码注入风险,当路径内容来自外部输入时会直接导致任意代码执行漏洞。
内容的提问来源于stack exchange,提问作者Glauco Ribeiro
相关产品推荐
相关产品推荐

