从字典中删除一个或多个键

mis*_*tor 0 python python-3.x

在Scala中,要从我需要做的字典中删除一个键(从REPL粘贴):

scala> Map(9 -> 11, 7 -> 6, 89 -> 43) - 9
res4: scala.collection.immutable.Map[Int,Int] = Map(7 -> 6, 89 -> 43)
Run Code Online (Sandbox Code Playgroud)

要删除多个键:

scala> Map(9 -> 11, 7 -> 6, 89 -> 43) -- Seq(9, 89)
res5: scala.collection.immutable.Map[Int,Int] = Map(7 -> 6)
Run Code Online (Sandbox Code Playgroud)

这样做的Python方法是什么?(我发布了Scala示例,因为这是我来自的背景.)

Dav*_*son 7

如果d您的词典和k要删除的密钥:

d.pop(k)
Run Code Online (Sandbox Code Playgroud)

例如:

d = {"a": 1, "b": 2, "c": 3}
d.pop("a")
print d
# {'c': 3, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

如果要删除多个:

for k in lst:
    d.pop(k)
Run Code Online (Sandbox Code Playgroud)

如果你想非破坏性地做这件事,并获得一个新的字典作为一个子集,你最好的选择是:

s = set(lst)
new_dict = {k: v for k, v in d.items() if k not in s}
Run Code Online (Sandbox Code Playgroud)

您可以使用k not in lst而不是处理set(lst),但set如果要删除的项目列表很长,则使用会更快.

  • `d.pop(k)`返回被删除的项目.如果这是你不需要的副作用,你也可以`del d [k]`. (4认同)