Programming

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

procodes 2020. 2. 19. 22:14
반응형

사전 키를 사용할 수 없으면 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


클래스 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"접근 방식으로 간주됩니다.


한 줄 해결책은 다음과 같습니다.

item['key'] if 'key' in item else None

새 목록에 사전 값을 추가하고 기본값을 제공하려는 경우에 유용합니다.

예.

row = [item['key'] if 'key' in item else 'default_value']

다른 사람들이 위에서 말했듯이 get ()을 사용할 수 있습니다.

그러나 키를 확인하기 위해 다음을 수행 할 수도 있습니다.

d = {}
if 'keyname' in d:

    # d['keyname'] exists
    pass

else:

    # d['keyname'] does not exist
    pass

__missing__(self, key)dict를 서브 클래 싱하여 재정의 하고 None을 반환 할 수 있습니다 .

class MyDict(dict):
    def __missing__(self, key):
        return None

당신이 그것을 함께 할 수 있다면 False, 다음, 거기에 또한 으로 hasattr 내장 된 연료 소모량은 :

e=dict()
hasattr(e, 'message'):
>>> False

참고 URL : https://stackoverflow.com/questions/6130768/return-none-if-dictionary-key-is-not-available



반응형