Python 从dictionary keys视图中删除密钥

Python 从dictionary keys视图中删除密钥,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,这可能是一个非常基本的问题,但很难找到正确的答案。我有一个名为raw_data的Python字典,并分别提取密钥,如下所示: features = raw_data.keys() 需要删除密钥的一些特定元素 del features[137] del features[160] del features[181] 但是,上面的代码会抛出一个错误: 'dict_keys' object doesn't support item deletion 删除键表单字典键对象的正确方法是什么?'dic

这可能是一个非常基本的问题,但很难找到正确的答案。我有一个名为raw_data的Python字典,并分别提取密钥,如下所示:

features = raw_data.keys()
需要删除密钥的一些特定元素

del features[137]
del features[160]
del features[181]
但是,上面的代码会抛出一个错误:

'dict_keys' object doesn't support item deletion
删除键表单字典键对象的正确方法是什么?

'dict_keys'是一个视图对象

它提供字典条目的动态视图,这意味着当字典更改时,视图会反映这些更改。

因此,在不更改字典本身的情况下删除视图中的键是没有意义的。要删除字典本身中的键,请参见@ailin的答案。删除字典中的键后,dict_keys-view对象中的键也将被删除

但是,如果您只是想要一个包含相关键的列表,则可以将dict_keys对象转换为列表和过滤器,或者直接迭代dict_keys对象并过滤不需要的对象

relevant_keys = [x for x in features if x not in [137, 160, 181]]

features=list(raw_data.keys());删除…
。如果您想从dict本身
del raw_data[key]
中删除键,那么转换为
列表然后删除有什么问题吗?@Ravi:如果这是为Python 2编写的代码(其中
.keys()
返回了一个
列表
),只需包装
.keys()的原始用法即可
列表中的
构造函数。是否确实要从dict\u视图对象而不是字典本身中删除?如果是,这背后的原因是什么?@ShadowRanger你是对的。这是Python 2中的代码存在的问题。在Python2环境中运行良好。