我无法以我想要的 python 格式获取数据。
基本上我有一个程序可以读取二进制数据并提供对所述数据进行绘图和分析的功能。
我的数据有主标题和副标题,副标题可以是任意数量的不同数据类型。
我希望能够访问我的数据,例如:
>>> a = myDatafile.readit()
>>> a.elements.hydrogen.distributionfunction
(a big array)
>>> a.elements.hydrogen.mass
1
>>> a.elements.carbon.mass
12
但直到运行时我才知道原子的名称。
我尝试过使用 namedtuple,例如在我读入所有原子名称之后:
self.elements = namedtuple('elements',elementlist)
其中 elementlist 是一个字符串列表,例如 ('hydrogen','carbon')。但问题是我不能嵌套这些使用例如:
for i in range(0,self.nelements):
self.elements[i] = namedtuple('details',['ux','uy','uz','mass','distributionfunction'])
然后能够通过例如访问值
self.elements.electron.distributionfunction.
也许我做的完全错了。我对 python 相当缺乏经验。我知道如果我不为动态命名变量而烦恼,这将很容易做到。
我希望我已经清楚地说明了我要实现的目标!
最佳答案
在不知道您的数据的情况下,我们只能给出一个通用的解决方案。
考虑到前两行包含标题和副标题,阅读它以某种方式确定了层次结构。您所要做的就是创建一个分层字典。
例如,扩展你的例子
data.elements.hydrogen.distributionfunction
data.elements.nitrogen.xyzfunction
data.elements.nitrogen.distributionfunction
data.compound.water.distributionfunction
data.compound.hcl.xyzfunction
所以我们必须创建一个这样的字典
{'data':{'elements':{'hydrogen':{'distributionfunction':<something>}
'nitrogen':{'xyzfunction':<something>,
'distributionfunction':<something>}
}
compound:{'water':{'distributionfunction':<something>}
'hcl':{'xyzfunction':<something>}
}
}
}
你将如何填充字典取决于现在很难说的数据。 但是您应该从标题中填充字典的键,并且您必须以某种方式将数据映射到字典空槽中的相应值。
填充 map 后,您可以访问它
yourDict['data']['compound']['hcl']['xyzfunction']
关于python - 嵌套命名元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8388707/