【问题标题】:Deleting a key from dictionary keys view [duplicate]从字典键视图中删除键[重复]
【发布时间】:2020-11-22 19:00:38
【问题描述】:

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

features = raw_data.keys()

需要删除键的一些特定元素。

del features[137]
del features[160]
del features[181]

上面的代码却抛出了一个错误:

'dict_keys' object doesn't support item deletion

删除键形式字典键对象的正确方法是什么?

【问题讨论】:

  • features = list(raw_data.keys()); del ...。如果你想从 dict 本身中删除键 del raw_data[key]
  • 转换成list然后删除有什么问题吗?
  • @Ravi:如果这是为 Python 2 编写的代码(其中.keys() 返回一个list),只需将.keys() 的原始用法包装在list 构造函数中。
  • 您真的要从 dict_view 对象中删除,而不是从字典本身中删除吗?如果是,这背后的原因是什么?
  • @ShadowRanger 你是对的。这是 Python 2 中的代码存在的问题。在 Python 2 环境中运行得非常好。

标签: python python-3.x dictionary


【解决方案1】:

'dict_keys' 是一个视图-对象。

它提供字典条目的动态视图,这意味着当字典更改时,视图会反映这些更改。 https://docs.python.org/3/library/stdtypes.html#dictionary-view-objects

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

但是,如果您只是想要一个包含相关键的列表,您可以将 dict_keys 对象转换为列表并过滤,或者直接遍历您的 dict_keys-object 并过滤不需要的对象。

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

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多