我有一个结构化的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 "", line 1, in 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
数组中是否存在给定字段?
你可以检查.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