python - 嵌套命名元组

标签 python namedtuple

我无法以我想要的 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/

相关文章:

python - 在子类对话框窗口中使用方法影响主窗口时出现问题

python - 我想制作一个可以录制 MP3 的临时电话答录机

python - 如何验证 namedtuple 值?

python - 在 python 中将 namedtuple 写入和读取文件

python - 为什么 Python 的 namedtuple 实例是从字符串模板创建的?

python - namedtuple._replace() 不像文档中描述的那样工作

python - Django 框架是否容易受到本地文件包含(LFI)和远程文件包含(RFI)的影响?

java - 将 python 文件捆绑到 jar 中以通过 jython 访问

python - 在Python中使用重复数据转换Dataframe

python - 如何将 Pandas 数据框转换为命名元组