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
'programing' 카테고리의 다른 글
PHP set_time_limit()를 사용하여 nginx 504 게이트웨이 시간 초과 방지 (0) | 2022.10.29 |
---|---|
Vue Router에서 앵커(북마크)를 처리하는 방법 (0) | 2022.10.29 |
이클립스의 안드로이드 앱:그래픽 레이아웃에 표시되지 않는 텍스트 편집 (0) | 2022.10.29 |
MariaDB가 오류 [42000][1064]로 단순 테이블 작성을 거부하는 이유는 무엇입니까? (0) | 2022.10.29 |
창의 명령줄에서 mysql 데이터 디렉터리를 찾는 방법 (0) | 2022.10.29 |