You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:45:56