Python如何在未知外层键的前提下提取字典字符串中所有shade值
从符合Python字典格式的字符串中提取所有shade字段的方案
方案1:基于现有exec逻辑改造
无需提前获知外层键的具体值,直接遍历字典的values()方法即可拿到所有内层字典,提取对应shade字段即可:
text = 'colors = {\r\n\r\n "1234": {\r\n "shade": [1, 2, 3]}, "23": {"shade": [3,4,5]}\r\n}\r\n' exec(text) for inner_dict in colors.values(): print(inner_dict["shade"])
运行后输出和要求的结果一致:
[1, 2, 3] [3, 4, 5]
方案2:更安全的无exec实现
exec执行未知来源的字符串存在代码注入风险,推荐使用ast.literal_eval仅解析字面量内容,安全性更高:
import ast text = 'colors = {\r\n\r\n "1234": {\r\n "shade": [1, 2, 3]}, "23": {"shade": [3,4,5]}\r\n}\r\n' # 提取等于号后的字典字面量部分 dict_content = text.split('=', 1)[1].strip() colors = ast.literal_eval(dict_content) for inner_dict in colors.values(): print(inner_dict["shade"])
兼容异常场景
如果存在部分外层字典不含shade字段的情况,可以增加字段存在判断避免报错:
for inner_dict in colors.values(): if "shade" in inner_dict: print(inner_dict["shade"])
内容的提问来源于stack exchange,提问作者enten77
相关产品推荐
相关产品推荐

