[python] 파이썬 사전에서 키를 제거하는 방법?

사전에서 키를 삭제할 때 다음을 사용합니다.

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). 모두는 적어도 세 배 빠른 속도로보다 delA의 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]