2012-10-05 39 views
0

在Scala中,從一本字典,我需要做刪除一個鍵(REPL粘貼):刪除一個或多個鍵從字典

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

要刪除多個鍵:

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

Python的做法是什麼? (我張貼Scala的例子,因爲這是後臺我來的。)

回答

5

如果d是你的字典和k要刪除的關鍵:

d.pop(k) 

例如:

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

如果你想刪除多個:

for k in lst: 
    d.pop(k) 

如果你wa NT這樣做非破壞性,並得到一個新的字典,是一個子集,你最好的賭注是:

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

你可以使用k not in lst,而不是處理set(lst),但使用set會更快,如果名單要移除的項目很長。

+0

有沒有辦法讓一個新的字典沒有指定的鍵? – missingfaktor

+0

@missingfaktor:查看編輯 –

+0

現在我們已經輸入了相同的東西五分鐘。刪除了我的答案,+1給你。 –

1
>>> d = {"a": 1, "b": 2, "c": 3} 
>>> for _ in ['a','c']: del(d[_]) 
... 
>>> d 
{'b': 2}