从dict中删除项目的最佳方法

cir*_*cus 49 python

在Python中,至少有两种方法可以使用键从dict中删除项目.

d = {"keyA": 123, "keyB": 456, "keyC": 789}

#remove via pop
d.pop("keyA")

#remove via del
del d["keyB"]
Run Code Online (Sandbox Code Playgroud)

这两种方法都会从dict中删除该项.

我想知道我应该使用哪些方法以及为什么.还有,哪个更pythonic?

Wan*_*wei 68

d.pop如果要捕获已删除的项目,请使用,例如item = d.pop("keyA").

使用del,如果你想从字典中删除项目.

  • 还有一个小问题是`.pop`会比del稍慢,因为它会转换为函数调用而不是原语. (26认同)
  • 那么,现在安全删除更好*(速度,可读性):用`if`检查或调用`.pop(key,None)?`:) (8认同)
  • @Tony,``如果在thedict中的键:del thedict [thekey]`` (3认同)
  • “请求宽恕而不是许可”是 Pythonic。因此,如何:`try: del d[key] except: pass` (3认同)
  • @BuvinJ 这么多简单的代码......字典查找非常快。@neoacetic两种方式都很好,但是“if x in d: del d[x]”似乎更快:在终端上, `import timeit` 然后执行 `timeit.timeit(stmt="if 'two' in a : del a['two']", setup="a={'one': 1, 'two': 2, ' Three': 3}", number=1000000)` 和 `timeit.timeit(stmt=" a.pop('二', 无)", setup="a={'一': 1, '二': 2, '三': 3}", number=1000000)` (3认同)
  • 如果密钥不存在,是否可以删除密钥而不会引发错误? (2认同)
  • @BuvinJ:更好的做法是显式地仅捕获` except KeyError`,永远不要有“裸露的` except`”。但在这种情况下,首先测试成员资格会更短、更快、更清晰和独立:“if thekey in thedict:” (2认同)
  • @Tony, `d.pop("key", None) "` 将删除“key”,返回“key”或 None 并且不会引发任何 KeyError。 (2认同)

Fen*_*kso 20

pop返回已删除键的值.
基本上,d.pop(key)评估为x = d[key]; del d[key]; return x.

  • pop当您需要知道已删除密钥的值时使用
  • del否则使用


ruo*_*ola 11

大多数时候,最有用的实际上是:

d.pop("keyC", None)
Run Code Online (Sandbox Code Playgroud)

它从字典中删除键,但如果它不存在则不会引发 a 。KeyError

该表达式还可以方便地返回键下的值,或者None如果没有的话。

  • 我喜欢这个! (2认同)