【问题标题】:why dict does not have remove method?为什么 dict 没有 remove 方法?
【发布时间】:2016-07-06 13:03:32
【问题描述】:

我知道 python list 有一个 remove() 方法,可以从列表中删除给定的对象。

aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.remove('xyz')

我知道我们可以使用 del 语句通过偏移量从列表中删除一个项目:

del aList[-1]

我也知道我们可以使用del语句从字典中按键删除一项:

aDict = {'a':1, 'b':2 'c':3}
del aDict['a']

但是,字典没有 remove() 方法,我认为这非常好:

aDict.remove('a')

我猜一个原因是 remove() 没有为字典保存任何类型而不是 del 语句,所以没有必要。它是否正确?

对于列表,remove() 将“按值搜索索引”和“按索引删除”结合在一起,所以它必须存在。这是正确的吗?

如果有的话,还有什么其他原因?

【问题讨论】:

    标签: python


    【解决方案1】:

    请注意,list.remove 做出了非常严格的保证 - 删除 value第一次 出现。现在,dict 中的排序是任意的 - 没有“第一”。

    【讨论】:

    • 所以你的意思是应用 remove() 到 dict 在概念上是错误的,因为 dict 没有“第一”。我喜欢这个。
    • 这只是我能想到的第一个。还有一些其他问题——list 的大小几乎是固定的,所以你可以“猜测”remove 需要多长时间。相反,dict 可能比它包含的数据任意大。在某些情况下,python 避免使用意味着快速性能的接口,而实际上它们很慢。
    【解决方案2】:

    如果你看这个问题:Difference between del, remove and pop on lists:你会注意到主要答案指出

    remove:删除first匹配的value,而不是特定的索引

    del:删除特定索引

    pop:返回被移除的元素

    因此,对于字典,它根本不需要删除方法,因为键只能有一个实例(它们必须是唯一的),del 就足够了。

    【讨论】:

    • 同意。然而@MisterMiyagi 的回答更接近。还是谢谢你。
    【解决方案3】:

    确实如此,它只是被称为pop

    弹出(键[,默认])
    如果键在字典中,则将其删除并返回其值,否则返回默认值。如果没有给出默认值并且键不在字典中,则会引发 KeyError。

    【讨论】:

    • dict.pop() 有一定的效果,这就是它通常的用途。
    • 这并没有真正回答为什么 python 没有 dict.remove() 函数但有 list.remove() 的问题。因为 pop 用于不同的东西(并且列表有两种方法)
    • @JGreenwell 谁说字典和列表的方法必须有相同的名称?
    • @DeepSpace 不正确。 pop() 返回删除的项目,del() 不返回。反正我只是开个小玩笑。
    • 请注意,pop 将通过 key 身份删除,而remove 将通过 value 身份删除。
    【解决方案4】:

    字典有pop,但没有remove。为什么不?因为remove 找到了与 value 匹配的 first 并将其删除,并且什么也不返回。所以在字典里:

    {'a': 5, 'b': 5}
    

    dict.remove 应该删除 。如果我使用dict.remove(5),应该删除哪个键?此外,这甚至不是非常有用的操作。如果您需要从字典中删除某个 ,则说明您使用了错误的数据结构。


    dct.pop(key)
    

    另一方面,没有什么不同

    value = dct[key]
    del dct[key]
    return value
    

    这可以与pop 列表方法对比:

    lst.pop(index)
    

    类似于

    value = lst[index]
    del lst[index]
    return value
    

    也就是说,它们都使用相同的原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多