[python] 사전 키를 사용할 수 없으면 None을 반환합니다.

키가 존재하는 경우 사전 값을 얻거나 None그렇지 않은 경우 단순히 반환하는 방법이 필요합니다 .

그러나 KeyError존재하지 않는 키를 검색하면 Python에서 예외 가 발생합니다. 키를 확인할 수는 있지만보다 명확한 것을 찾고 있습니다. None키가 존재하지 않으면 반환하는 방법 이 있습니까?



답변

당신이 사용할 수있는 dict.get()

value = d.get(key)

Noneif 을 반환 합니다 key is not in d. 다음 대신에 반환되는 다른 기본값을 제공 할 수도 있습니다 None.

value = d.get(key, "empty")


답변

더 이상 궁금하지 않습니다. 언어에 내장되어 있습니다.

    >>> 도움말 (dict)

    모듈 내장의 클래스 dict에 대한 도움말 :

    클래스 dict (객체)
     | dict ()-> 새로운 빈 사전
     | dict (mapping)-> 매핑 객체에서 초기화 된 새 사전
     | (키, 값) 쌍
    ...
     |
     | 가져 오기(...)
     | D.get (k [, d])-> D [k] D에서 k이면 d. 그렇지 않으면 d. d의 기본값은 없음입니다.
     |
    ...


답변

사용하다 dict.get

키가 사전에있는 경우 키 값을 리턴하고 그렇지 않으면 기본값을 리턴합니다. 기본값이 지정되지 않은 경우 기본값은 없음으로 설정되므로이 메소드는 KeyError를 발생시키지 않습니다.


답변

클래스 의 get()메소드를 사용해야합니다dict

d = {}
r = d.get('missing_key', None)

결과는 r == None입니다. 키가 사전에 없으면 get 함수는 두 번째 인수를 반환합니다.


답변

보다 투명한 솔루션을 원하면 서브 클래스 dict로 다음과 같은 동작을 수행 할 수 있습니다 .

class NoneDict(dict):
    def __getitem__(self, key):
        return dict.get(self, key)

>>> foo = NoneDict([(1,"asdf"), (2,"qwerty")])
>>> foo[1]
'asdf'
>>> foo[2]
'qwerty'
>>> foo[3] is None
True


답변

나는 보통 이와 같은 상황에 대해 기본 결정 을 사용합니다 . 인수를 취하지 않고 새 키를 볼 때 값을 작성하는 팩토리 메소드를 제공합니다. 새 키의 빈 목록과 같은 것을 반환 할 때 더 유용합니다 ( 예 참조 ).

from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key']  # prints 'None'


답변

다른 사람들이 이미 제안한 것처럼 dict객체의 get()방법을 사용할 수 있습니다 . 또는 정확히 수행중인 작업에 따라 다음 try/except과 같은 제품군을 사용할 수 있습니다 .

try:
   <to do something with d[key]>
except KeyError:
   <deal with it not being there>

이 사건을 처리하는 데 매우 “Pythonic”접근 방식으로 간주됩니다.