programing

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

copyandpastes 2022. 10. 29. 12:20
반응형

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

사전에서 키를 삭제하는 한 줄 방법이 있습니까?KeyError?

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

키가 딕셔너리에 있는지 여부에 관계없이 삭제하려면 의 2개의 인수 형식을 사용합니다.

my_dict.pop('key', None)

이것은 돌아올 것이다.my_dict[key]한다면key사전에 존재합니다.None그렇지않으면.두 번째 파라미터가 지정되지 않은 경우(즉,my_dict.pop('key'))와key존재하지 않는다, aKeyError인스톨 됩니다.

존재하는 것이 보증되는 키를 삭제하려면 , 다음의 기능도 사용할 수 있습니다.

del my_dict['key']

이렇게 하면KeyError키가 사전에 없는 경우.

구체적으로 "한 줄의 방법이 있습니까?"라고 대답합니다.

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

...음, 당신이 물어봤군요;-)

단, 이 방법으로 오브젝트를 삭제하는 것을 고려해야 합니다.dict는 atomic이 아닙니다.'key'있을 수 있다my_dict기간 중if단, 삭제하기 전에 삭제할 수 있습니다.del실행되며, 이 경우del에 실패하다KeyError 점을 고려할 때, 또는 이와 유사한 것을 사용하는 것이 가장 안전할 것입니다.

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

물론 외줄타기는 절대 아닙니다.

정확히 무슨 일인지 알아내는데 시간이 좀 걸렸어요my_dict.pop("key", None)하고 있습니다.따라서 다른 사용자의 검색 시간을 절약하기 위해 다음과 같은 답변을 추가합니다.

pop(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)둘 다 최소 3배 이상 빠릅니다.del에 있어서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}

또한 사전에 없는 값을 팝하는 오류를 포착해야 할 경우 다음과 같이 lambda inside 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존재하지 않습니다.

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

이 요지는 나중에 참고할 수 있도록 포크합니다.

매우 상세하게 설명하려면 예외 처리를 사용할 수 있습니다.

try: 
    del dict[key]

except KeyError: pass

이것은, 「」, 「」, 「RADIUS」보다 느립니다.pop()하지 않는 ).

my_dict.pop('key', None)

키가 몇 개라도 상관없지만, 반복해서 이 작업을 수행할 경우 후자의 방법이 더 좋습니다.

가장 빠른 방법은 다음과 같습니다.

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

하지만 이 방법은 위험하다 왜냐하면'key'줄 a를 합니다.KeyError승합니니다다

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

dict 이해와 조합된 items()는 키와 값의 쌍을 삭제하는 작업에도 도움이 되지만, dict 기술이 적절하지 않다는 단점이 있습니다.실제로 새로운 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}

에는 렇게면면 면면면면면면면면KeyError하지 않는 이 값이 한 경우 할 수

키와 딕트

a={"Assemblyisscary":3637}
key1="Assemblyisscary"
key2="Binarylangisnightmare"

삭제 기능

def delkey(dictionary,key):
    class temp:pass
    if temp==dictionary.get(key,temp):return False
    else: del dictionary[key];return True

테스트

delete(a,key2)
delete(a,key1)

산출량

False
True

언급URL : https://stackoverflow.com/questions/11277432/how-can-i-remove-a-key-from-a-python-dictionary

반응형