etc./StackOverFlow

Python 사전에서 키를 제거하려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2021. 11. 25. 06:53
반응형

질문자 :Tony


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

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

이 작업을 수행하는 한 줄 방법이 있습니까?



키가 사전에 있는지 여부에 관계없이 키를 삭제하려면 dict.pop() 의 두 인수 형식을 사용하십시오.

 my_dict.pop('key', None)

key 가 사전에 있으면 my_dict[key] 반환 None 반환합니다. 두 번째 매개변수가 지정되지 않고(즉, my_dict.pop('key') ) key 가 존재하지 않으면 KeyError 가 발생합니다.

존재가 보장된 키를 삭제하려면 다음을 사용할 수도 있습니다.

 del my_dict['key']

키가 사전에 없으면 KeyError


Sven Marnach

특히 "이 작업을 수행하는 한 줄 방법이 있습니까?"

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

...글쎄, 당신 은 물었습니다 ;-)

dict 에서 객체를 삭제하는 이 방법은 원자 my_dict 점을 고려해야 합니다. 'key' if 문 중에 del 이 실행되기 전에 삭제될 수 있습니다. 이 경우 delKeyError 실패합니다. dict.pop 또는 다음 라인을 따라 무언가를 사용하는 것이 가장 안전합니다.

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

물론 이것은 한 줄짜리가 아닙니다.


zigg

my_dict.pop("key", None) 이 정확히 무엇을 하는지 파악하는 데 시간이 좀 걸렸습니다. 따라서 다른 사람들이 인터넷 검색 시간을 절약하기 위해 이것을 답변으로 추가하겠습니다.

pop(key[, default])

key 가 사전에 있으면 제거하고 값을 반환하고 그렇지 않으면 default 를 반환합니다. 기본값 이 제공되지 않고 가 사전에 없으면 KeyError 가 발생합니다.

선적 서류 비치


Akavall

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) 보다 약간 더 빠른 경우 키가 존재하지 않을 때. try / except 문에서 del 보다 3배 이상 빠릅니다.

 >>> 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

Peter Smit

한 줄의 코드로 사전에서 많은 키를 제거해야 하는 경우 map()을 사용하는 것이 매우 간결하고 Python 으로 읽을 수 있다고 생각합니다.

 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' 키가 없어도 ''는 오류를 일으키지 않았습니다.


Marc Maxmeister

사전 이해 를 사용하여 해당 키가 제거된 새 사전을 만들 수 있습니다.

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

조건에 따라 삭제할 수 있습니다. key 가 없으면 오류가 발생하지 않습니다.


Shameem

"del" 키워드 사용:

 del dict[key]

Sarthak Gupta

매우 장황한 경우 예외 처리를 사용할 수 있습니다.

 try: del dict[key] except KeyError: pass

그러나 키가 없으면 pop() 메서드보다 느립니다.

 my_dict.pop('key', None)

몇 개의 키에는 문제가 되지 않지만 이 작업을 반복적으로 수행하는 경우 후자의 방법이 더 나은 방법입니다.

가장 빠른 접근 방식은 다음과 같습니다.

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

그러나 이 방법은 두 줄 사이에서 'key' KeyError 가 발생하므로 위험합니다.


Alec

다음 접근 방식 중 일부를 사용하여 Python 사전에서 키를 삭제할 수 있습니다.

del 키워드 사용 당신이 한 것과 거의 같은 접근 방식입니다.

 myDict = {'one': 100, 'two': 200, 'three': 300 } print(myDict) # {'one': 100, 'two': 200, 'three': 300} if myDict.get('one') : del myDict['one'] print(myDict) # {'two': 200, 'three': 300}

또는

다음과 같이 할 수 있습니다.

그러나 이 프로세스에서 실제로 사전에서 특정 키를 제외 하는 대신 사전에서 어떤 키도 삭제 하지 않는다는 점을 명심해야 합니다. myDict 와 동일하게 주문되지 않은 사전을 반환하는 것을 관찰했습니다.

 myDict = {'one': 100, 'two': 200, 'three': 300, 'four': 400, 'five': 500} {key:value for key, value in myDict.items() if key != 'one'}

셸에서 실행하면 {'five': 500, 'four': 400, 'three': 300, 'two': 200} 와 같이 실행됩니다. myDict 와 같은 순서가 아닙니다. myDict 를 인쇄하려고 하면 이 접근 방식으로 사전에서 제외된 키를 포함하여 모든 키를 볼 수 있습니다. 그러나 다음 명령문을 변수에 할당하여 새 사전을 만들 수 있습니다.

 var = {key:value for key, value in myDict.items() if key != 'one'}

이제 인쇄하려고 하면 상위 순서를 따릅니다.

 print(var) # {'two': 200, 'three': 300, 'four': 400, 'five': 500}

또는

pop() 메서드를 사용합니다.

 myDict = {'one': 100, 'two': 200, 'three': 300} print(myDict) if myDict.get('one') : myDict.pop('one') print(myDict) # {'two': 200, 'three': 300}

delpop 의 차이점은 pop() 메서드를 사용하여 다음과 같이 필요한 경우 실제로 키 값을 저장할 수 있다는 것입니다.

 myDict = {'one': 100, 'two': 200, 'three': 300} if myDict.get('one') : var = myDict.pop('one') print(myDict) # {'two': 200, 'three': 300} print(var) # 100

이것이 유용하다고 생각되면 나중에 참조할 수 있도록 이 요지 를 분기합니다.


M.Innat

사전 dict_name.pop(item) 이라는 메서드가 있으며 사전에서 키:값 쌍을 삭제하는 데 사용할 수 있습니다.

 a={9:4,2:3,4:2,1:3} a.pop(9) print(a)

그러면 다음과 같이 출력됩니다.

 {2: 3, 4: 2, 1: 3}

이렇게 하면 사전에서 한 줄로 항목을 삭제할 수 있습니다.


Anshika Singh

또 다른 방법은 items() + dict 이해를 사용하는 것입니다.

dict 이해와 결합된 items()는 키-값 쌍 삭제 작업을 수행하는 데 도움이 될 수 있지만 제자리에 있는 dict 기술이 아니라는 단점이 있습니다. 실제로 포함하고 싶지 않은 키를 제외하고 생성된 경우 새 딕셔너리입니다.

 test_dict = {"sai" : 22, "kiran" : 21, "vinod" : 21, "sangam" : 21} # Printing dictionary before removal print ("dictionary before performing remove is : " + str(test_dict)) # Using items() + dict comprehension to remove a dict. pair # removes vinod new_dict = {key:val for key, val in test_dict.items() if key != 'vinod'} # Printing dictionary after removal print ("dictionary after remove is : " + str(new_dict))

산출:

 dictionary before performing remove is : {'sai': 22, 'kiran': 21, 'vinod': 21, 'sangam': 21} dictionary after remove is : {'sai': 22, 'kiran': 21, 'sangam': 21}

Sai Kiran Sangam

나는 불변 버전을 선호한다

 foo = { 1:1, 2:2, 3:3 } removeKeys = [1,2] def woKeys(dct, keyIter): return { k:v for k,v in dct.items() if k not in keyIter } >>> print(woKeys(foo, removeKeys)) {3: 3} >>> print(foo) {1: 1, 2: 2, 3: 3}

CervEd

키의 단일 필터

  • "key"가 my_dict에 있는 경우 "key"를 반환하고 my_dict에서 제거합니다.
  • my_dict에 "key"가 없으면 None을 반환합니다.

my_dict 를 제자리에서 변경합니다(변경 가능).

 my_dict.pop('key', None)

키에 대한 다중 필터

새로운 딕셔너리 생성(불변)

 dic1 = { "x":1, "y": 2, "z": 3 } def func1(item): return item[0]!= "x" and item[0] != "y" print( dict( filter( lambda item: item[0] != "x" and item[0] != "y", dic1.items() ) ) )

ZenG

lambda 와 함께 filter 를 사용할 수도 있습니다.

 >>> d = {'a': 1, 'b': 2, 'c': 3} >>> dict(filter(lambda x: x[0] != 'a', d.items())) {'b': 2, 'c': 3} >>>

U12-Forward

출처 : http:www.stackoverflow.com/questions/11277432/how-can-i-remove-a-key-from-a-python-dictionary

반응형