주어진 키가 사전에 이미 있는지 확인하고 증가시킵니다. 사전이 주어지면 해당

사전이 주어지면 해당 사전의 주어진 키가 이미 아닌 값으로 설정되었는지 어떻게 알 수 있습니까?

즉, 나는 이것을하고 싶다 :

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에 액세스 할 때 얻을 수 없습니다 . 따라서 코드 대신 일반을 사용 하려면NoneKeyErrordict

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