사전에서 키를 삭제할 때 다음을 사용합니다.
if 'key' in my_dict: del my_dict['key']
이 작업을 수행하는 한 줄 방법이 있습니까?
질문자 :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
특히 "이 작업을 수행하는 한 줄 방법이 있습니까?"
if 'key' in my_dict: del my_dict['key']
...글쎄, 당신 은 물었습니다 ;-)
dict
에서 객체를 삭제하는 이 방법은 원자 my_dict
점을 고려해야 합니다. 'key'
if
문 중에 del
이 실행되기 전에 삭제될 수 있습니다. 이 경우 del
은 KeyError
실패합니다. dict.pop
또는 다음 라인을 따라 무언가를 사용하는 것이 가장 안전합니다.
try: del my_dict['key'] except KeyError: pass
물론 이것은 한 줄짜리가 아닙니다.
my_dict.pop("key", None)
이 정확히 무엇을 하는지 파악하는 데 시간이 좀 걸렸습니다. 따라서 다른 사람들이 인터넷 검색 시간을 절약하기 위해 이것을 답변으로 추가하겠습니다.
pop(key[, default])
key 가 사전에 있으면 제거하고 값을 반환하고 그렇지 않으면 default 를 반환합니다. 기본값 이 제공되지 않고 키 가 사전에 없으면
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)
보다 약간 더 빠른 경우 키가 존재하지 않을 때. 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
한 줄의 코드로 사전에서 많은 키를 제거해야 하는 경우 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' 키가 없어도 ''는 오류를 일으키지 않았습니다.
사전 이해 를 사용하여 해당 키가 제거된 새 사전을 만들 수 있습니다.
>>> my_dict = {k: v for k, v in my_dict.items() if k != 'key'}
조건에 따라 삭제할 수 있습니다. key
가 없으면 오류가 발생하지 않습니다.
"del" 키워드 사용:
del dict[key]
매우 장황한 경우 예외 처리를 사용할 수 있습니다.
try: del dict[key] except KeyError: pass
그러나 키가 없으면 pop()
메서드보다 느립니다.
my_dict.pop('key', None)
몇 개의 키에는 문제가 되지 않지만 이 작업을 반복적으로 수행하는 경우 후자의 방법이 더 나은 방법입니다.
가장 빠른 접근 방식은 다음과 같습니다.
if 'key' in dict: del myDict['key']
그러나 이 방법은 두 줄 사이에서 'key'
KeyError
가 발생하므로 위험합니다.
다음 접근 방식 중 일부를 사용하여 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}
del
과 pop
의 차이점은 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
이것이 유용하다고 생각되면 나중에 참조할 수 있도록 이 요지 를 분기합니다.
사전 dict_name.pop(item)
이라는 메서드가 있으며 사전에서 키:값 쌍을 삭제하는 데 사용할 수 있습니다.
a={9:4,2:3,4:2,1:3} a.pop(9) print(a)
그러면 다음과 같이 출력됩니다.
{2: 3, 4: 2, 1: 3}
이렇게 하면 사전에서 한 줄로 항목을 삭제할 수 있습니다.
또 다른 방법은 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}
나는 불변 버전을 선호한다
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}
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() ) ) )
lambda
와 함께 filter
를 사용할 수도 있습니다.
>>> d = {'a': 1, 'b': 2, 'c': 3} >>> dict(filter(lambda x: x[0] != 'a', d.items())) {'b': 2, 'c': 3} >>>
출처 : http:www.stackoverflow.com/questions/11277432/how-can-i-remove-a-key-from-a-python-dictionary
한 번에 여러 예외를 포착하시겠습니까? (0) | 2021.11.25 |
---|---|
브라우저 창의 div 높이를 100%로 만드는 방법 (0) | 2021.11.25 |
CSS를 사용하여 텍스트 또는 이미지에 투명한 배경을 제공하려면 어떻게 합니까? (0) | 2021.11.25 |
파이썬에서 문자열을 어떻게 소문자로 합니까? (0) | 2021.11.25 |
연산자 오버로딩에 대한 기본 규칙과 관용구는 무엇입니까? (0) | 2021.11.25 |