如何从Python字典中删除一个键?

当试图从字典中删除一个密钥时,我写道:

if 'key' in myDict: del myDict['key'] 

有没有一个这样做的方式?

使用dict.pop()

 my_dict.pop('key', None) 

如果key存在于字典中,则返回my_dict[key] ,否则返回None 。 如果没有指定第二个参数(即my_dict.pop('key') )并且key不存在,则引发my_dict.pop('key')

具体回答“是否有一条这样做的路线?”

 if 'key' in myDict: del myDict['key'] 

…好吧,你 😉

但是你应该考虑这种从dict中删除一个对象的方式不是primefaces的 – 在if语句中, 'key'可能在myDict中,但是在del被执行之前可能会被删除,在这种情况下, del会以KeyError失败。 考虑到这一点,最好使用dict.pop或类似的方法

 try: del myDict['key'] except KeyError: pass 

当然,这当然不是一蹴而就的。

我花了一些时间来弄清楚my_dict.pop("key", None)在做什么。 所以我会添加这个作为一个答案,以节省其他人的search时间:

popup(键[,默认])

如果键在字典中,请将其除去并返回其值,否则返回默认值。 如果没有给出default并且key不在字典中,则引发KeyError

文档

上述三种解决scheme的时机。

小字典:

 >>> import timeit >>> timeit.timeit("d={'a':1}; d.pop('a')") 0.23399464370632472 >>> timeit.timeit("d={'a':1}; del d['a']") 0.15225347193388927 >>> timeit.timeit("d={'a':1}; d2 = {key: val for key, val in d.items() if key != 'a'}") 0.5365207354998063 

更大的字典:

 >>> timeit.timeit("d={nr: nr for nr in range(100)}; d.pop(3)") 5.478138627299643 >>> timeit.timeit("d={nr: nr for nr in range(100)}; del d[3]") 5.362219126590048 >>> timeit.timeit("d={nr: nr for nr in range(100)}; d2 = {key: val for key, val in d.items() if key != 3}") 13.93129749387532 

如果你需要在一行代码中从字典中删除很多密钥,我认为使用map()是非常简洁和pythonic可读的:

 myDict = {'a':1,'b':2,'c':3,'d':4} map(myDict.pop, ['a','c']) #the list of keys to remove >>> myDict {'b': 2, 'd': 4} 

如果你需要在popup一个不在字典中的值的地方发现错误,可以在map()里面使用lambda:

 map(lambda x: myDict.pop(x,None), ['a','c','e']) [1, 3, None] #pop returns >>> myDict {'b': 2, 'd': 4} 

作品。 和“e”不会导致错误,即使myDict没有“e”键。

 >>> if myDict.get(key): myDict.pop(key) 

其他方式

 >>> {k:v for k, v in myDict.items() if k!='key'} 

你可以按条件删除。 没有错误,如果不存在

Interesting Posts