在python中动态构建类引用

在python中动态构建类引用,python,class,Python,Class,我有一个带有标题的csv文件,我正在尝试使用标题来标识类中要更新的位置 Age, all, bladder, brain, breast,... 0, 23.34, 0, 3.8905, 0, ... 1, 22.7339, 0, 4.4064, 0,... 我有一个包含98个条目的“基线”列表,每个条目都包括一个字段.cancer,而在.cancer中有字段.all、.bladder、.brain、.breast等等,因此50岁人群膀胱癌的患病率可以通过 baseline[50].cance

我有一个带有标题的csv文件,我正在尝试使用标题来标识类中要更新的位置

Age, all, bladder, brain, breast,...
0, 23.34, 0, 3.8905, 0, ...
1, 22.7339, 0, 4.4064, 0,...
我有一个包含98个条目的“基线”列表,每个条目都包括一个字段.cancer,而在.cancer中有字段.all、.bladder、.brain、.breast等等,因此50岁人群膀胱癌的患病率可以通过

baseline[50].cancer.bladder.prevalence
我需要一个命令,可以执行以下操作:

k=0
for row in csv_data:
    for j in range(len(row)):
        baseline[k].cancer.header[j].prevalence = row[j]
    k += 1

因此,名称的一部分(即膀胱、大脑…)来自标题。有一种简单的方法可以做到这一点吗?

虽然这看起来像是熊猫的工作,但如果列号/顺序是固定的,就有可能做到这一点。以下代码应该可以工作:请注意,它利用了一些Python 3功能:

import csv

with open('data.txt') as csvfile:
    data = csv.reader(csvfile, delimiter=',')
    _, *cancer_columns = next(data) # capture the headers

    for age, *cancers in data:
        for i, cancer in enumerate(cancers):
            # dynamically get attribute and assign based on cancer_columns index
            getattr(baseline[age].cancer, cancer_columns[i]).prevalence = float(cancer) 

尝试查看pandas数据帧。您始终可以使用
getattr(parentobject,“subobject\u name”)
获取子对象。感谢您快速给出答案。看来在学习熊猫和重写代码之前,我需要在短期内实现下面brian的答案。