我使用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条目中的名称顺序。
你能帮帮我吗?
答案 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')