2016-08-07 3 views
0

私はscipy.io.loadmat nested structures (i.e. dictionaries)のコードを使ってPythonにmatlab構造体を読み込みます。私はdtypeのリストに現れるフィールドの名前のリストを作りたいと思っています。私のコードは次のとおりです。だから、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内のエントリのリストを作成したいと思います:

thisList = [ 'Aircraft_Name', 'Low_Mass' ] #etc., etc. 

DTYPEエントリの名前の順序が保持されるように。

私を助けてもらえますか?

答えて

1

ただ、リストの内包表記を使用して、各反復では、各タプルから最初のアイテムを拾う:

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

または機能的なアプローチを使用zip()として:

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

十分な提案はありますが、dict変数内のその場所から「dtype」にアクセスするにはどうすればよいですか?それが役に立ったらスクリーンショットを送ることができます。 –

+0

データはこのように画面に表示されます(ごめんなさい)... –

+0

([u'B788__ ']、[[99817]]、[[140000]]、[[160000]]、[[43000]]、 dtype =しかし、dt変数は上記のようにdict変数に埋め込まれており、それを検索したいものです。[( 'Aircraft_Name'、 'O')、( 'Low_Mass'、 'O')、 –

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') 

このタプルをすべてのフィールドを1つずつ設定またはフェッチすると便利です:

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は、変数の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') 
+0

しかし、dict変数内のdtypeから動的にリストを作成するのはどうですか?ありがとうございます。 –

+0

'thisDict'が変数であれば、配列は' thisDictです。 dtype'は 'dtype'、' thisDict.dtype.names'はフィールド名です – hpaulj

+0

ビンゴ。ありがとうございます。 –

関連する問題