我的目标
我正在尝试创建一个可以存储和操作多个数据集的类。
然而,我在尝试让访问数据变得尽可能简单和直观时遇到了一些问题。该对象的布局实质上就像一个嵌套字典,其布局看起来如下:
data = { "File1_Column1": {'header': [...],
'data': [...]},
"File1_Column2": {'header': [...],
'data': [...]}, ...}
我希望发生的事情
假设我有一个名为data
的这个类的实例,我希望data['File1_Column1']['header']
和data['File1_Column1']['data']
能够返回人们所期望的内容,但我也希望data['File1_Column1']
能够返回与data['File1_Column1']['data']
相同的结果。我之所以这样做是因为我可以预见到自己99%的时间会使用数据列表,这将使其更加方便。
前两个问题非常简单,只需利用__getitem__
即可解决,然而,我真正困扰的是如何让后者起作用。
下面是我简化后的代码。我尝试了在Data
类的__getitem__
方法中使用if语句来检查Subscript
类的__getitem__
方法是否被调用,但没有成功。
我已经尝试过的
class Data:
def __init__(self):
self._data = {}
def append(self, label, data):
self._data[label] = data
def __getitem__(self, label):
class Subscript:
def __init__(self, data):
self._data = data
def __getitem__(self, label):
return self._data[label]
subdata = Subscript(self._data[label])
return subdata
data = Data()
example = {'header': ['Trace', 'Unit'], 'data': [1, 2, 3, 4]}
data.append('Label', example)
print(data['Label'])
print(data['Label']['data'])
print(data['Label']['header'])
结果
<__main__.Data.__getitem__.<locals>.Subscript object at 0x007B4B10>
[1, 2, 3, 4]
['Trace', 'Unit']
我期望发生的事情
[1, 2, 3, 4]
[1, 2, 3, 4]
['Trace', 'Unit']
有没有一种方法可以实现这个?
data['File1_Column1']
)和调用列中的数据(data['File1_Column1'][index]
)? - user10417531data['Label']
根据后面的内容评估出Subscript
或者[1,2,3,4]
中的一个。由于Python无法看到未来,因此这是不可能的。 - rdas