代码之家  ›  专栏  ›  技术社区  ›  Adam Glick

TypeError:“KeysView”对象不支持索引

  •  7
  • Adam Glick  · 技术社区  · 8 年前

    def dataProcessing(datafile):
    import h5py
    import numpy as np
    import matplotlib.pyplot as plt
    import pylab
    
    f = h5py.File(datafile, 'r')
    #print(f)
    #print("Keys: %s" % f.keys())
    groupKeyVal = f.keys()[4]
    rawData = list(f[groupKeyVal])
    
    rawDataMat = np.matrix(rawData)
    
    for i in range(0,len(rawDataMat[:,0])):
        fig = rawDataMat[i,:]
        wav = np.squeeze(np.asarray(fig))
        plt.plot(wav)
        plt.show()
    
    1 回复  |  直到 5 年前
        1
  •  8
  •   hpaulj    8 年前

    在Python3中,字典 keys 返回“视图”,而不是可索引列表。

    In [80]: d={'a':1, 'b':2}
    In [81]: d.keys()
    Out[81]: dict_keys(['a', 'b'])
    In [82]: d.keys()[0]
    ....
    TypeError: 'dict_keys' object does not support indexing
    

    h5

    In [86]: f = h5py.File('data.h5')
    In [87]: f.keys()
    Out[87]: KeysView(<HDF5 file "data.h5" (mode r+)>)
    In [88]: f.keys()[0]
    ....
    TypeError: 'KeysView' object does not support indexing
    In [89]: list(f.keys())
    Out[89]: ['dset', 'dset1', 'vset']
    In [90]: list(f.keys())[1]
    Out[90]: 'dset1'
    

    list 这有点麻烦,但它使键上的迭代更有内存效率。

    In [92]: for k in f.keys():print(f[k])
    <HDF5 dataset "dset": shape (3, 5), type "<f8">
    <HDF5 dataset "dset1": shape (2, 3, 10), type "<f8">
    <HDF5 dataset "vset": shape (100,), type "|O">
    
    推荐文章