Python求助:从嵌套字典中提取扁平化列表
解决字符串形式列表转真实列表的问题
你的问题出在字典里的键和值都是字符串格式的列表,而非Python原生的列表对象。直接提取得到的只是字符串,需要把这些字符串解析成真正的列表。推荐用ast.literal_eval()来处理,它比eval()更安全,专门用于解析Python字面量。
修改后的代码如下:
import ast data ={'Country': {"['USA', 'Russia']":"['A country in North America','A country in Asia']"},'River': {"['Nile', 'Amazon']":"['A river in Africa','A river in South America']"}} for category in data.values(): # 遍历每个分类下的键值对(这里每个分类仅含一组键值) for str_list, str_desc_list in category.items(): # 将字符串解析为列表对象 real_list = ast.literal_eval(str_list) real_desc_list = ast.literal_eval(str_desc_list) print(real_list) print(real_desc_list)
运行后输出就是你想要的格式:
['USA', 'Russia'] ['A country in North America', 'A country in Asia'] ['Nile', 'Amazon'] ['A river in Africa', 'A river in South America']
如果只需要提取Country对应的列表,可以单独处理:
import ast data ={'Country': {"['USA', 'Russia']":"['A country in North America','A country in Asia']"},'River': {"['Nile', 'Amazon']":"['A river in Africa','A river in South America']"}} # 取出Country下的唯一一组键值对 country_str, country_desc_str = next(iter(data['Country'].items())) country_list = ast.literal_eval(country_str) country_desc_list = ast.literal_eval(country_desc_str) print(country_list) print(country_desc_list)
输出:
['USA', 'Russia'] ['A country in North America', 'A country in Asia']
为什么用ast.literal_eval而非eval?
eval()会执行任何传入的代码,存在安全风险,若字符串包含恶意代码会被直接执行。而ast.literal_eval()仅解析Python字面量类型(列表、字典、字符串、数字等),安全性更高。
内容的提问来源于stack exchange,提问作者BotRex
相关产品推荐
相关产品推荐

