python:在函数错误的TypeError中严重表现dict

时间:2014-10-18 21:55:51

标签: python python-2.7 numpy dictionary typeerror

我知道我需要清理,例如

dict = {
  'sensor1': [list of numbers from sensor 1 pertaining to measurements on different days],
  'sensor2': [list of numbers from from sensor 2 pertaining to measurements from different days], 
  etc. } 

有些日子有不好的价值,我想通过使用其中一个键值的上限来生成一个新的dict,其中包含那个糟糕日子的所有传感器值:

def clean_high(dict_name,key_string,limit):
    '''clean all the keys to eliminate the bad values from the arrays'''
    new_dict = dict_name
    for key in new_dict: new_dict[key] = new_dict[key][new_dict[key_string]<limit]
    return new_dict

如果我在IPython中单独运行所有行,它就可以了。糟糕的日子被消除了,好的日子被保留了下来。这些都是numpy.ndarray类型:new_dict[key]new_dict[key][new_dict[key_string]<limit]

但是,当我运行clean_high()时,我收到错误:

  

TypeError:只有一个元素的整数数组才能转换为索引

什么?

clean_high()内,new_dict[key]的类型是字符串,而不是数组。 为什么类型会改变?有没有更好的方法来修改我的字典?

1 个答案:

答案 0 :(得分:2)

迭代时不要修改字典。根据{{​​3}}:“在添加或删除字典中的条目时迭代视图可能会引发RuntimeError或无法迭代所有条目”。相反,创建一个新的字典并在迭代旧字典时对其进行修改。

def clean_high(dict_name,key_string,limit):
    '''clean all the keys to eliminate the bad values from the arrays'''
    new_dict = {}
    for key in dict_name:
        new_dict[key] = dict_name[key][dict_name[key_string]<limit]
    return new_dict