在 Python 中,将字符串(str)转换为字典(dict)通常需要字符串本身符合特定的格式,最常见的是 JSON 格式,以下是几种常见的方法和示例:

使用 json.loads()(推荐,适用于标准 JSON 格式)
如果字符串是符合 JSON 格式的,可以使用 json 模块直接解析。
import json
json_str = '{"name": "Alice", "age": 25, "is_student": true}'
result_dict = json.loads(json_str)
print(result_dict)
# 输出: {'name': 'Alice', 'age': 25, 'is_student': True}
注意事项:
- JSON 格式要求:
- 键必须用双引号 包裹(单引号 会导致错误)。
- 布尔值是
true/false(Python 中会转为True/False)。 null会被转为None。
使用 ast.literal_eval()(适用于简单 Python 字面量)
如果字符串是 Python 字典的字符串形式(但不符合 JSON 格式),可以使用 ast.literal_eval() 安全解析。
import ast
dict_str = "{'name': 'Bob', 'age': 30, 'is_student': False}"
result_dict = ast.literal_eval(dict_str)
print(result_dict)
# 输出: {'name': 'Bob', 'age': 30, 'is_student': False}
注意事项:
- 比
eval()更安全,不会执行任意代码。 - 要求字符串必须是合法的 Python 字面量(如字典、列表、数字等)。
手动解析(适用于非标准格式)
如果字符串格式不固定(如 key=value 或 key:value),需要手动分割处理。
示例1:key=value 格式
str_data = "name=Charlie,age=35,is_student=False"
result_dict = {}
for item in str_data.split(","):
key, value = item.split("=")
# 尝试转换类型(简单处理)
if value.isdigit():
value = int(value)
elif value.lower() in ("true", "false"):
value = value.lower() == "true"
result_dict[key] = value
print(result_dict)
# 输出: {'name': 'Charlie', 'age': 35, 'is_student': False}
示例2:key:value 格式(类似环境变量)
str_data = "name:David,age=40,is_student:True"
result_dict = {}
for item in str_data.split(","):
if ":" in item:
key, value = item.split(":")
elif "=" in item:
key, value = item.split("=")
else:
continue # 跳过无效项
result_dict[key] = value
print(result_dict)
# 输出: {'name': 'David', 'age': '40', 'is_student': 'True'}
使用正则表达式(复杂格式)
如果字符串结构复杂(如嵌套字典),可以用正则表达式提取键值对。

import re
str_data = "name=Eve, age=42, info={'city': 'Paris', 'hobbies': ['reading', 'hiking']}"
result_dict = {}
# 提取顶层键值对
for item in re.findall(r"(\w+)=([^,]+)", str_data):
key, value = item
result_dict[key] = value
print(result_dict)
# 输出: {'name': 'Eve', 'age': '42', 'info': "{'city': 'Paris', 'hobbies': ['reading', 'hiking']}"}
| 方法 | 适用场景 | 示例输入 | 输出 |
|---|---|---|---|
json.loads() |
标准 JSON 格式 | {"key": "value"} |
{'key': 'value'} |
ast.literal_eval() |
Python 字面量格式 | {'key': 'value'} |
{'key': 'value'} |
| 手动分割 | 简单的 key=value 或 key:value |
name=Alice,age=25 |
{'name': 'Alice', 'age': 25} |
| 正则表达式 | 复杂或嵌套结构 | name=Eve, age=42, info={'...'} |
提取键值对 |
根据你的字符串格式选择合适的方法!

