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

如何解决Python用literal_eval给字典列表新增键值对不生效的问题

错误原因

你原代码的核心问题是:ast.literal_eval() 每次调用都会生成一个独立的临时字典列表对象,你仅修改了这个临时对象的属性,没有将修改后的结果回写到DataFrame的对应位置,因此改动不会被持久化保存。

解决方案

方案1:统一所有元素的type值(全为1)

推荐使用pandas的apply方法实现,代码更简洁高效:

import ast

df['col1'] = df['col1'].apply(
    lambda s: [dict(item, type=1) for item in ast.literal_eval(s)]
)

如果习惯用for循环写法,可参考下方实现,核心是要把修改后的数据回写:

import ast

for i in range(len(df)):
    # 先将字符串转为字典列表存入变量
    dict_list = ast.literal_eval(df.loc[i, 'col1'])
    # 遍历新增字段
    for item in dict_list:
        item['type'] = 1
    # 回写修改后的结果到原列
    df.loc[i, 'col1'] = dict_list

方案2:根据key值匹配不同type

如果需要给不同key的字典分配不同type值,可以提前定义映射表实现:

import ast

# 自定义key和type的对应关系
type_mapping = {
    'cat': 1,
    'dog': 1,
    'flower': 2,
    'house': 3
    # 其余key的映射按需补充
}

df['col1'] = df['col1'].apply(
    lambda s: [dict(item, type=type_mapping.get(item['key'], 0)) for item in ast.literal_eval(s)]
)

其中type_mapping.get(item['key'], 0)的0为默认值,可自行调整为无匹配时需要赋值的type值。

鲁棒性优化

如果列中存在空值、格式不合法的字符串,可增加异常判断避免报错:

import ast

def process_col_str(s):
    try:
        dict_list = ast.literal_eval(s)
        return [dict(item, type=1) for item in dict_list]
    except:
        # 格式异常时返回原内容或空列表,按需调整
        return s

df['col1'] = df['col1'].apply(process_col_str)

内容的提问来源于stack exchange,提问作者bonbon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:21:00