杰瑞科技汇

python string转dict

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

python string转dict-图1
(图片来源网络,侵删)

使用 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=valuekey: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'}

使用正则表达式(复杂格式)

如果字符串结构复杂(如嵌套字典),可以用正则表达式提取键值对。

python string转dict-图2
(图片来源网络,侵删)
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=valuekey:value name=Alice,age=25 {'name': 'Alice', 'age': 25}
正则表达式 复杂或嵌套结构 name=Eve, age=42, info={'...'} 提取键值对

根据你的字符串格式选择合适的方法!

python string转dict-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇