주어진 키가 이미 사전에 있는지 확인하십시오.


질문

 

키의 값을 업데이트하기 전에 사전에 키가 있는지 테스트하고 싶었습니다. 나는 다음 코드를 썼다.

if 'key1' in dict.keys():
  print "blah"
else:
  print "boo"

나는 이것이이 일을 성취하는 가장 좋은 방법이 아니라고 생각합니다.사전에서 키를 테스트하는 더 좋은 방법이 있습니까?


답변

 

IN은 DICT의 열쇠의 존재 여부를 테스트하는 의도 된 방법입니다.

d = {"key1": 10, "key2": 23}

if "key1" in d:
    print("this will execute")

if "nonexistent key" in d:
    print("this will not")

기본값을 원한다면 항상 dict.get ()을 사용할 수 있습니다.

d = dict()

for i in range(100):
    key = i % 10
    d[key] = d.get(key, 0) + 1

그리고 언제든지 컬렉션 모듈에서 DICT.SETDEFAULT ()를 항상 반복적으로 사용하거나 DETALDICT를 사용하여 다음과 같이 DICT.SETDEFAULT ()를 사용할 수 있습니다.

from collections import defaultdict

d = defaultdict(int)

for i in range(100):
    d[i % 10] += 1

그러나 일반적으로 키워드는 그것을하는 가장 좋은 방법입니다.



답변

키를 호출 할 필요가 없습니다.

if 'key1' in dict:
  print("blah")
else:
  print("boo")

선형 검색을 수행하는 것과는 반대로 사전의 해싱을 사용하는 것처럼 훨씬 더 빠를 것입니다.



답변

IN 키워드를 사용하여 사전에 키가있는 키의 존재 여부를 테스트 할 수 있습니다.

d = {'a': 1, 'b': 2}
'a' in d # <== evaluates to True
'c' in d # <== evaluates to False

변경하기 전에 사전에서 키의 존재를 확인하는 공통적 인 사용은 값을 초기화하는 것입니다 (예 : 값이 목록 인 경우, 예 : 추가 할 수있는 빈 목록이 있는지 확인하려면 값을 초기화하십시오.키에 대한 첫 번째 값을 삽입 할 때).이러한 경우에는 collections.defaultdict () 유형을 찾을 수 있습니다.

구형 코드에서는 Dictionaries의 키의 존재를 확인하는 데 사용되는 has_key ()의 일부로를 찾을 수 있습니다 (Dict_Name에서 key_name을 사용하는 경우).



답변

이 코드를 단축 할 수 있습니다.

if 'key1' in my_dict:
    ...

그러나 이것은 최상의 화장품 개선입니다.왜 이것이 가장 좋은 방법이 아니라고 믿는가?



답변

허용 된 답변의 제안 된 방법 (1 천만 루프)의 속도 실행에 대한 추가 정보는 다음과 같습니다.

Mydict 경과 시간 1.07 초의 '키' mydict.get ( '키') 경과 시간 1.84 초 myDefaultDict [ 'Key'] 경과 시간 1.07 초

그러므로 IN 또는 DEFAULTICT를 사용하면 GET에 대해 권장됩니다.



답변

대신 setDefault 메서드를 사용하는 것이 좋습니다.그것은 당신이 원하는 모든 것을 할 것 같습니다.

>>> d = {'foo':'bar'}
>>> q = d.setdefault('foo','baz') #Do not override the existing key
>>> print q #The value takes what was originally in the dictionary
bar
>>> print d
{'foo': 'bar'}
>>> r = d.setdefault('baz',18) #baz was never in the dictionary
>>> print r #Now r has the value supplied above
18
>>> print d #The dictionary's been updated
{'foo': 'bar', 'baz': 18}
출처:https://stackoverflow.com/questions/1602934/check-if-a-given-key-already-exists-in-a-dictionary