问题描述:
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'

虽然它长得像列表,但实际上是一个 str 类型的变量,无法直接用索引访问或遍历:

type(raw_str)  # <class 'str'>
raw_str[0]     # '['  —— 取到的是字符 '[',而不是 'qwen-turbo'

那么如何将它转换为真正的 Python 列表呢?
解决方案:
方法一:使用 json.loads()(推荐)
import json

raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = json.loads(raw_str)

print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']

print(type(result))
# <class 'list'>

方法二:使用 ast.literal_eval()
import ast

raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = ast.literal_eval(raw_str)

print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']

原理解释:
为什么用 json.loads()

我们的 raw_str 本质上是一个 JSON 格式的字符串(双引号 + 方括号 + 逗号),符合 JSON 规范。json.loads() 的作用就是将 JSON 字符串解析为对应的 Python 对象:

SON 格式 转换后 Python 类型
[...] list
{...} dict
"text" str
123 int
true / false True / False
两种方法的区别:
对比项 json.loads() ast.literal_eval()
来源模块 json(标准库) ast(标准库)
适用格式 仅限 JSON 格式(双引号) 支持 Python 字面量(单/双引号均可)
安全性 安全,只解析 JSON 安全,只解析字面量,不执行代码
推荐场景 处理接口返回的 JSON 数据 处理 Python 风格的字符串
常见错误:直接使用 list():

很多人第一反应是用 list() 转换,但这会导致每个字符被拆成单独的元素

raw_str = '["qwen-turbo","qwen-plus","deepseek"]'

list(raw_str)
# ['[', '"', 'q', 'w', 'e', 'n', '-', 't', 'u', 'r', 'b', 'o', '"', ',', ...]

list() 的作用是迭代字符串中的每一个字符,而不是解析字符串的结构。

总结:
  • 遇到字符串形式的列表,不要用 list(),要用 json.loads() 或 ast.literal_eval()
  • 如果字符串是标准 JSON 格式(双引号),优先用 json.loads()
  • 如果字符串用的是单引号(Python 风格),用 ast.literal_eval()
以下是完整代码:
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
print(type(raw_str))

print("-"*80)

import json
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = json.loads(raw_str)
print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']
print(type(result))
# <class 'list'>

print("-"*80)

import ast
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = ast.literal_eval(raw_str)
print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']

print("-"*80)
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
print(list(raw_str))
# print(raw_str)
# ['[', '"', 'q', 'w', 'e', 'n', '-', 't', 'u', 'r', 'b', 'o', '"', ',', ...]

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐