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

如何在Python中设计含可变列表与字典的复杂数据类型类?

解决方案

首先需要修正你提供的样本数据里的语法错误:its_all字段的写法不符合Python语法——列表中不能直接存放键值对,应该改为字典(如果是多个键值对的集合),或者修正为合法的列表结构。以下是修正后的样本数据:

complicated_data_sample1 = {
    "name": "test_name",
    "description": "test_description",
    "type": "test_type",
    "its_all": {
        "overview": {"brand": "dell", "model": "11"},
        "Processor": {"Speed": "1222mhz"}
    }
}

complicated_data_sample2 = {
    "name": "test_name2",
    "description": "test_description2",
    "type": "test_type2",
    "its_all": {
        "Memory": {"flash": "256", "ram": "8gb", "video": "1gb"},
        "network": {"switching": "supported", "ports": "16", "features": ["f1", "f2", "f3"]},
        "dimension": {"width": "3", "length": "3", "height": "4"}
    }
}

complicated_data_sample3 = {
    "name": "test_name3",
    "description": "test_description3",
    "type": "test_type3",
    "its_all": None
}

设计Python类

考虑到每个样本的属性值不同,我们需要用实例属性而非类属性(类属性是所有实例共享的,不适合存储不同样本的个性化数据)。以下是实现方案:

基础实现

class ComplicatedData:
    def __init__(self, name, description, type_, its_all=None):
        # 用type_是因为type是Python内置关键字,避免命名冲突
        self.name = name
        self.description = description
        self.type = type_
        self.its_all = its_all

使用示例

通过字典初始化实例,直接访问属性:

# 从样本1创建实例
data1 = ComplicatedData(**complicated_data_sample1)
print(data1.name)  # 输出: test_name
print(data1.its_all["Processor"]["Speed"])  # 输出: 1222mhz

# 从样本3创建实例
data3 = ComplicatedData(**complicated_data_sample3)
print(data3.its_all)  # 输出: None

进阶优化(可选)

如果希望更便捷地访问its_all中的嵌套属性,可以利用dataclasses简化类定义,并添加辅助方法适配键名变化的场景:

from dataclasses import dataclass
from typing import Dict, Optional, Any

@dataclass
class ComplicatedData:
    name: str
    description: str
    type: str
    its_all: Optional[Dict[str, Any]] = None

    def get_its_attr(self, top_key, nested_key=None):
        """快速提取its_all中的嵌套属性"""
        if not self.its_all or top_key not in self.its_all:
            return None
        if nested_key:
            return self.its_all[top_key].get(nested_key)
        return self.its_all[top_key]

# 使用示例
data2 = ComplicatedData(**complicated_data_sample2)
print(data2.get_its_attr("network", "ports"))  # 输出: 16
print(data2.get_its_attr("Memory"))  # 输出: {'flash': '256', 'ram': '8gb', 'video': '1gb'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:10:24