사전이 주어지면 해당 사전의 주어진 키가 이미 아닌 값으로 설정되었는지 어떻게 알 수 있습니까?
즉, 나는 이것을하고 싶다 :
my_dict = {}
if (my_dict[key] != None):
my_dict[key] = 1
else:
my_dict[key] += 1
즉, 이미 값이 있으면 값을 늘리거나 그렇지 않으면 1로 설정하고 싶습니다.
답변
찾고 있습니다 collections.defaultdict
(Python 2.5 이상에서 사용 가능). 이
from collections import defaultdict
my_dict = defaultdict(int)
my_dict[key] += 1
당신이 원하는 것을 할 것입니다.
일반 파이썬 dict
의 경우 주어진 키에 대한 값이 없으면 dict에 액세스 할 때 얻을 수 없습니다 . 따라서 코드 대신 일반을 사용 하려면None
KeyError
dict
if key in my_dict:
my_dict[key] += 1
else:
my_dict[key] = 1
답변
한 줄의 코드 로이 작업을 선호합니다.
my_dict = {} my_dict [some_key] = my_dict.get (some_key, 0) + 1
사전에는 get이라는 함수가 있습니다.이 함수에는 원하는 키와 존재하지 않는 경우 기본값 인 두 개의 매개 변수가 사용됩니다. 키 가이 한 줄의 코드에 존재하지 않는 경우를 처리하려는 경우에만이 방법을 기본값으로 지정하는 것이 좋습니다.
답변
나는 개인적으로 사용하는 것을 좋아한다 setdefault()
my_dict = {}
my_dict.setdefault(some_key, 0)
my_dict[some_key] += 1
답변
그 key in dict
관용구 가 필요합니다 .
if key in my_dict and not (my_dict[key] is None):
# do something
else:
# do something else
그러나 defaultdict
(dF가 제안한대로) 사용을 고려해야 합니다.
답변
” 그 dict의 주어진 색인이 이미 None이 아닌 값으로 설정되어 있는지 어떻게 알 수 있습니까?”라는 질문에 대답하려면 다음 을 선호합니다.
try:
nonNone = my_dict[key] is not None
except KeyError:
nonNone = False
이것은 이미 호출 된 EAFP 개념 (용서를 요청한 후 허가하기가 더 쉬움)을 준수합니다. 또한 key in my_dict and my_dict[key] is not None
조회 비용이 비싸면 흥미로운 점에서와 같이 사전에서 중복 키 조회를 피합니다 .
실제 문제 가 발생 하면 int가 있으면 int를 늘리거나 그렇지 않으면 기본값으로 설정하십시오.
my_dict[key] = my_dict.get(key, default) + 1
앤드류 윌킨슨의 대답 에서처럼.
사전에 수정 가능한 객체를 저장하는 경우 세 번째 해결책이 있습니다. 이에 대한 일반적인 예는 키의 요소 목록을 저장하는 멀티 맵 입니다. 이 경우 다음을 사용할 수 있습니다.
my_dict.setdefault(key, []).append(item)
사전에 키 값이 존재하지 않으면 setdefault 메소드는이를 setdefault의 두 번째 매개 변수로 설정합니다. 표준 my_dict [key]처럼 동작하며 키 값 (새로 설정 한 값일 수 있음)을 반환합니다.
답변
cgoldberg와 동의 함. 내가하는 방법 :
try:
dict[key] += 1
except KeyError:
dict[key] = 1
따라서 위와 같이하거나 다른 사람들이 제안한대로 기본 dict를 사용하십시오. if 문을 사용하지 마십시오. 그것은 파이썬이 아닙니다.
답변
많은 답변에서 볼 수 있듯이 몇 가지 솔루션이 있습니다. has_key () 메소드 인 LBYL의 한 인스턴스 (도약하기 전에 살펴보기)는 아직 언급되지 않았습니다.
my_dict = {}
def add (key):
if my_dict.has_key(key):
my_dict[key] += 1
else:
my_dict[key] = 1
if __name__ == '__main__':
add("foo")
add("bar")
add("foo")
print my_dict