我在获取python中想要的格式的数据时遇到了困难。在
基本上提供了一个二进制数据分析程序。在
我的数据有主标题和副标题,可以是任意数量的不同数据类型。在
我希望能够访问我的数据,例如:
>>> a = myDatafile.readit()
>>> a.elements.hydrogen.distributionfunction
(a big array)
>>> a.elements.hydrogen.mass
1
>>> a.elements.carbon.mass
12
但直到运行时我才知道原子的名字。在
我尝试过使用namedtuple,例如在我读入所有atom名称之后:
^{pr2}$其中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相当缺乏经验。我知道如果我不介意动态地命名变量,这将很容易实现。在
我希望我已经清楚地表明了我要达到的目标!在
在不知道你的数据的情况下,我们只能给出一个通用的解决方案。在
考虑到前两行包含了标题和子标题,您以某种方式确定了层次结构。你所要做的就是创建一个层次词典。在
例如,扩展您的示例
所以我们必须创建一个这样的字典
^{pr2}$如何填充字典取决于现在很难说出的数据。 但是字典的键应该从头中填充,并且你必须将数据映射到字典的空槽中的相应值。在
填充地图后,您可以将其作为
如果元素名是动态的,并且在运行时从数据中获取,那么可以将它们分配给dict并像这样进行访问
但是如果你想要点式符号,你可以在运行时创建属性
^{pr2}$这里我假设你有数据,但是用任何其他格式的数据,你可以做类似的把戏
下面是一个从嵌套数据递归创建namedtuples的方法。在
相关问题 更多 >
编程相关推荐