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

如何用列表推导式将字典列表转换为Data数据类列表?

问题修正:将JSON转为Data数据类实例列表

现有JSON结构

[
  {
    "name": "blabla1",
    "value": "1"
  },
  {
    "name": "blabla2",
    "value": "2"
  },
  {
    "name": "blabla3",
    "value": "3"
  }
]

定义的Data数据类

from dataclasses import dataclass, field

@dataclass
class Data:
    name: str = field(init=True)
    value: str = field(init=True)
    is_valid: bool = field(init=False, default=True)

需求

读取上述JSON内容(已解析为包含3个字典的列表v),生成一个Data数据类的实例列表。

现有错误实现

当前尝试的列表推导式存在问题:

data = [[(Data(name=k, value=v, is_valid=True)) for k, v in v.items()] for d in v]

执行后得到嵌套列表:外层因变量名冲突出现错误数量的元素,每个子列表包含2个Data实例,完全不符合需求。


正确实现方法

方法1:字典解包(推荐)

利用Python字典解包特性,直接将每个字典的键值对作为参数传入Data构造方法,is_valid会自动使用默认值True:

data = [Data(**d) for d in v]

方法2:显式指定字段

如果需要明确控制字段赋值,可手动提取字典中的name和value字段:

data = [Data(name=d["name"], value=d["value"]) for d in v]

错误原因说明

原代码的核心问题:

  1. 变量名冲突:外层循环迭代变量是d,但内层错误使用v.items()(v是整个字典列表,而非当前遍历的单个字典),应改为d.items()。
  2. 不必要的双层循环:每个字典仅需生成一个Data实例,遍历字典键值对会生成多余实例,同时导致嵌套列表结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:02:51