【问题标题】:TypeError: 'KeysView' object does not support indexingTypeError:“KeysView”对象不支持索引
【发布时间】:2018-01-07 15:46:01
【问题描述】:

我在尝试直接在 python 中分析 HDF5 文件中的数据时遇到此错误。这段代码在我的 linux 机器上运行良好,但在我的 Mac 上的 Spyder3 中编译相同的脚本时出现此错误。我尝试使用我的 mac 的原因是因为我不确定如何在 linux 终端上编写和运行脚本。

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

【问题讨论】:

    标签: python python-3.x python-2.7 key h5py


    【解决方案1】:

    在 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">
    

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 2013-06-23
      • 2019-04-18
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多