我有一个结构化的numpy
数组:
>>> import numpy
>>> a = numpy.zeros(1, dtype = [('field0', 'i2'), ('field1', 'f4')])
然后我开始检索一些值。但是,我事先并不知道,如果我的数组包含某个字段。因此,如果我尝试访问不存在的字段,我预计会收到IndexError
:
>>> a[0]['field0']
0
>>> a[0]['field2']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index
我当然可以选择try-except
;但是,这可能会掩盖一些错误,因为IndexError
没有指定,我在哪个级别点击了不存在的索引:
>>> try:
... a[9999]['field2']['subfield3']
... except IndexError:
... print('Some index does not exist')
...
Some index does not exist
我还尝试将numpy
数组作为列表来处理,但这不起作用:
>>> if 'field0' in a[0]:
... print('yes')
... else:
... print('no')
...
no
因此,问题:有没有办法检查结构化numpy
数组中是否存在给定字段?
答案 0 :(得分:5)
您可以查看.dtype.names
或.dtype.fields
:
>>> a.dtype.names
('field0', 'field1')
>>> 'field0' in a.dtype.names
True
>>> a.dtype.fields
mappingproxy({'field0': (dtype('int16'), 0), 'field1': (dtype('float32'), 2)})
>>> 'field0' in a.dtype.fields
True