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

如何从Python自定义类构建的数据集里提取指定列数据

解决方案

核心实现思路

你需要用到Python内置的getattr()函数(用于根据属性名字符串获取对象属性值),同时建立Excel列名和Item类私有属性的映射关系即可实现需求,提供两种实现方案供你选择:


方案1:实例级取值(推荐,灵活度更高)

不需要修改类的原有结构,仅新增实例方法,自己遍历已有的Item集合获取全量数据:

第一步:修改Item类,新增get_value实例方法

class Item():
    # 原有属性、方法代码全部保留,仅新增下面的get_value方法
    def get_value(self, title):
        title = title.lower()
        # 兼容Excel里的不同列名写法
        if title in ("product", "name"):
            return self.__name
        elif title in ("cost", "price"):
            return self.__cost
        elif title in ("used_by", "gender"):
            return self.__gender
        elif title == "prime":
            return self.__prime
        raise ValueError(f"不支持的列名:{title},支持列:product/name、cost/price、used_by/gender、prime")

第二步:调用方法获取全量列数据

你已经有所有Item实例组成的集合mylist,直接遍历取值即可:

# 获取所有商品名称列表,和你预期的输出完全一致
product_list = [item.get_value("product") for item in mylist]
# 其他列同理,比如获取所有成本列表
cost_list = [item.get_value("cost") for item in mylist]

方案2:类级直接取值(符合你给出的调用形式)

如果希望直接调用方法就返回全量列表,不需要自己遍历,可以把方法设为类方法,同时让Item类自动维护所有创建过的实例:

第一步:修改Item类

class Item():
    # 新增:保存所有创建过的Item实例的集合
    _all_instances = set()

    __name = ""
    __cost = 0
    __gender = ""
    __prime = ""

    # 修改__init__方法,新增保存实例的逻辑
    def __init__(self, name, cost, gender, prime):
        self.__name = name
        self.__cost = cost
        self.__gender = gender
        self.__prime = prime
        # 新增:实例创建后自动加入全局集合
        self._all_instances.add(self)
    
    # 原有其他方法都不变,新增下面的类方法
    @classmethod
    def get_value(cls, title):
        title = title.lower()
        res = []
        for instance in cls._all_instances:
            if title in ("product", "name"):
                res.append(instance.__name)
            elif title in ("cost", "price"):
                res.append(instance.__cost)
            elif title in ("used_by", "gender"):
                res.append(instance.__gender)
            elif title == "prime":
                res.append(instance.__prime)
            else:
                raise ValueError(f"不支持的列名:{title},支持列:product/name、cost/price、used_by/gender、prime")
        return res

第二步:直接调用类方法获取全量数据

# 直接调用就能得到所有商品名称列表
product_list = Item.get_value("product")

用到的Python内置功能说明

这里核心用到的是Python内置的getattr(object, name[, default])函数,作用是获取对象object中名为name的属性的值,如果属性不存在可以返回指定的默认值,刚好匹配你需要根据传入的列名字符串动态取值的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:48:05