Python如何将嵌套字典访问语句作为函数参数传递?
实现方案
你原来的写法存在两个核心问题:
- 第二个参数的写法
['dwe']['dwdw']['fefe']本身是非法语法,单独执行会抛出TypeError: list indices must be integers or slices, not str,单元素列表无法用字符串作为索引取值 - 函数内的
data + nest逻辑完全不匹配取值需求,字典和列表无法直接相加
推荐实现(无安全风险)
把第二个参数调整为嵌套键的有序列表,在函数内循环遍历取值即可:
dic = {'wow': 77, 'yy': 'gt', 'dwe': {'dwdw': {'fefe': 2006}}} def get_missing_key(data, nest, default_value): try: current = data for key in nest: current = current[key] return current except KeyError: return default_value # 调用示例 print(get_missing_key(dic, ['dwe', 'dwdw', 'fefe'], 16)) # 输出 2006 print(get_missing_key(dic, ['dwe', 'not_exist', 'fefe'], 16)) # 输出 16
这个方案不需要执行动态代码,没有注入风险,兼容任意层级的嵌套字典取值。
可选实现(不推荐,有安全风险)
如果你一定要传入表达式形式的参数,可以把第二个参数改为字符串格式的表达式,用eval执行,但如果参数来自用户输入会有恶意代码执行风险:
def get_missing_key(data, nest, default_value): try: return eval(f"data{nest}") except KeyError: return default_value # 调用示例 print(get_missing_key(dic, "['dwe']['dwdw']['fefe']", 16)) # 输出 2006
内容的提问来源于stack exchange,提问作者Hussein Al-Mosawi
相关产品推荐
相关产品推荐

