如何从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'}
你可以按条件删除。 没有错误,如果不存在