사전에서 키를 삭제할 때 다음을 사용합니다.
if 'key' in my_dict:
del my_dict['key']
이 작업을 수행하는 한 줄 방법이 있습니까?
답변
사전에 있는지 여부에 관계없이 키를 삭제하려면 다음과 같이 두 개의 인수 형식을 사용하십시오 dict.pop()
.
my_dict.pop('key', None)
이 반환 my_dict[key]
되면 key
사전에 존재하며, None
그렇지. 두 번째 매개 변수가 지정되지 않은 (즉. 경우 my_dict.pop('key')
) 및 key
존재하지 않는하는이 KeyError
발생합니다.
존재한다고 보장되는 키를 삭제하려면 다음을 사용할 수도 있습니다.
del my_dict['key']
KeyError
키가 사전에 없으면 키를 올립니다 .
답변
구체적으로 “이 작업을 수행하는 한 가지 방법이 있습니까?”
if 'key' in my_dict: del my_dict['key']
… 음, 당신 은 물었다 😉
당신은에서 개체를 삭제하는이 방법이 있다고하지만, 고려해야 할 dict
것입니다 원자하지 – 그것은 것은 그 수 'key'
에있을 수 있습니다 my_dict
동안 if
문하지만, 전에 삭제 될 수 있습니다 del
경우가있는, 실행 del
실패합니다 KeyError
. 이것을 감안할 때, 사용dict.pop
하거나 무언가를 사용하는 것이 가장 안전합니다.
try:
del my_dict['key']
except KeyError:
pass
물론 이것은 확실히 하나의 라이너가 아닙니다 .
답변
정확히 무엇을하고 있는지 알아내는 데 시간이 걸렸습니다 my_dict.pop("key", None)
. 따라서 다른 인터넷 검색 시간을 절약하기 위해 이것을 답변으로 추가하겠습니다.
pop(key[, default])
키 가 사전에 있으면 키를 제거하고 값을 리턴하고 그렇지 않으면 기본값을 리턴하십시오 . 경우 기본값이 주어지지하고 키가 사전에없는, a는
KeyError
발생합니다.
답변
del my_dict[key]
my_dict.pop(key)
키가 존재할 때 사전에서 키를 제거하는 것보다 약간 빠릅니다.
>>> import timeit
>>> setup = "d = {i: i for i in range(100000)}"
>>> timeit.timeit("del d[3]", setup=setup, number=1)
1.79e-06
>>> timeit.timeit("d.pop(3)", setup=setup, number=1)
2.09e-06
>>> timeit.timeit("d2 = {key: val for key, val in d.items() if key != 3}", setup=setup, number=1)
0.00786
그러나 키가 존재하지 않을 if key in my_dict: del my_dict[key]
때보 다 약간 빠릅니다 my_dict.pop(key, None)
. 모두는 적어도 세 배 빠른 속도로보다 del
A의 try
/ except
문 :
>>> timeit.timeit("if 'missing key' in d: del d['missing key']", setup=setup)
0.0229
>>> timeit.timeit("d.pop('missing key', None)", setup=setup)
0.0426
>>> try_except = """
... try:
... del d['missing key']
... except KeyError:
... pass
... """
>>> timeit.timeit(try_except, setup=setup)
0.133
답변
한 줄의 코드로 사전에서 많은 키를 제거 해야하는 경우 map () 사용은 간결하고 파이썬으로 읽을 수 있다고 생각합니다.
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}
사전에없는 값을 표시 할 때 오류를 잡으려면 map () 안에 람다를 사용하십시오.
map(lambda x: myDict.pop(x,None), ['a', 'c', 'e'])
[1, 3, None] # pop returns
>>> myDict
{'b': 2, 'd': 4}
또는에서 python3
대신 목록 이해를 사용해야합니다.
[myDict.pop(x, None) for x in ['a', 'c', 'e']]
효과가있다. myDict에 ‘e’키가 없더라도 ‘e’는 오류를 발생시키지 않았습니다.
답변
사전 이해 를 사용하여 해당 키가 제거 된 새 사전을 작성할 수 있습니다 .
>>> my_dict = {k: v for k, v in my_dict.items() if k != 'key'}
조건에 따라 삭제할 수 있습니다. key
존재하지 않으면 오류 가 없습니다.
답변
“del”키워드 사용 :
del dict[key]