我知道我需要清理,例如
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]
的类型是字符串,而不是数组。
为什么类型会改变?有没有更好的方法来修改我的字典?
答案 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