如何将列表中字符串形式的Python字典名称转为对应字典对象?
问题:将字符串形式的字典名称转换为实际字典对象以访问内容
我有7个命名格式为songn的Python字典(例如song1、song2),每个字典包含name、duration、artist字段。我尝试创建名为playlist_full的列表,期望列表元素是字典对象,但当前循环生成的列表里全是字符串形式的字典名称(比如"song1")。当我用playlist_full[2].get("name")尝试访问song3的歌曲名时,因为元素是字符串而非字典,无法正常获取内容。
解决方法
可以通过以下两种方式将字符串形式的字典名称转换为实际字典对象:
方法1:使用eval()函数
如果字符串来源完全可信,可直接用eval()解析字符串对应的变量,示例代码:
# 假设playlist是包含"song1"、"song2"...等字符串的列表 playlist_full = [eval(song) for song in playlist] # 访问song3的名称 print(playlist_full[2]["name"])
这段列表推导式会遍历playlist中的每个字符串,通过eval()获取对应的字典对象,最终playlist_full将存储实际字典,即可正常通过键访问内容。
方法2:使用globals()/locals()(更安全)
如果想避免eval()的安全风险(若字符串来自不可信来源可能执行恶意代码),可通过命名空间获取变量:
# 从全局命名空间中获取对应字典 playlist_full = [globals()[song] for song in playlist] # 若字典在局部作用域,可替换为locals()
这种方式仅从指定命名空间中查找变量,安全性更高。
内容的提问来源于stack exchange,提问作者JoshG
相关产品推荐
相关产品推荐

