来自dtype列表的字段名称?

时间:2016-08-07 19:51:43

标签: python matlab numpy scipy

我使用scipy.io.loadmat nested structures (i.e. dictionaries)中的代码将matlab结构读入Python。我想列出dtype列表中显示的字段名称。我的代码是:

handleEvent(myRect, evt){
  // ...
}

因此,考虑到这一点,我想在dtype中创建条目列表:

matfile   =loadmat(dataDirStr + matFileName, struct_as_record=True) # a dictionary
theseKeys = matfile.keys()            #as list
thisDict  = matfile[ theseKeys[ 1 ] ] #type = void1152, size = (1, 118)
#
#screen display of contents is:
#
dtype    = [ ( 'Aircraft_Name', 'O'), ('Low_Mass', 'O') ]

这样就可以保留dtype条目中的名称顺序。

你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

只需使用列表推导并在每次迭代中从每个元组中选取第一项:

thisList = [item[0] for item in dtype]

或者作为一种功能方法使用standard

thisList = next(zip(*dtype)) # in python 2.x zip(*dtype)[0]

答案 1 :(得分:0)

In [168]: dt=np.dtype([ ( 'Aircraft_Name', 'O'), ('Low_Mass', 'O') ])
In [169]: dt
Out[169]: dtype([('Aircraft_Name', 'O'), ('Low_Mass', 'O')])
In [170]: dt.names
Out[170]: ('Aircraft_Name', 'Low_Mass')

这个元组可以方便地逐个设置或获取所有字段:

In [171]: x=np.empty((3,),dtype=dt)
In [172]: x
Out[172]: 
array([(None, None), (None, None), (None, None)], 
      dtype=[('Aircraft_Name', 'O'), ('Low_Mass', 'O')])
In [173]: for name in x.dtype.names:
     ...:     x[name][:]=['one','two','three']
     ...:     
In [174]: x
Out[174]: 
array([('one', 'one'), ('two', 'two'), ('three', 'three')], 
      dtype=[('Aircraft_Name', 'O'), ('Low_Mass', 'O')])

descr是变量&n; dtype的列表说明;名字也可以从中拉出来:

In [180]: x.dtype.descr
Out[180]: [('Aircraft_Name', '|O'), ('Low_Mass', '|O')]
In [181]: [i[0] for i in x.dtype.descr]
Out[181]: ['Aircraft_Name', 'Low_Mass']
In [182]: x.dtype.names
Out[182]: ('Aircraft_Name', 'Low_Mass')