itsource

사전 키를 사용할 수 없는 경우 기본값 반환

mycopycode 2022. 9. 4. 21:39
반응형

사전 키를 사용할 수 없는 경우 기본값 반환

, 할 수 방법이 합니다.None(일부러)

Python은 「Python」을 .KeyError존재하지 않는 키를 검색하는 경우 예외입니다.키를 확인할 수 있다는 것은 알지만, 좀 더 명확한 것을 찾고 있습니다. 돌려주는 요?None가가존 재재 ?? ???

사용할 수 있습니다.

value = d.get(key)

은 반환될 것이다.Nonekey is not in d. . 도 있습니다이 기본값은 다음과 같이 반환됩니다.None:

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

더 이상 궁금하지 않다.그것은 언어에 내장되어 있다.

>> 도움말(메모)
모듈 빌트인의 class dict 도움말:

class dict(개체)| dict() -> 새로운 빈 딕셔너리| dict(dict) -> 매핑 객체의 사전에서 초기화된 새로운 사전| (키, 값)쌍...|| get(...))| D.get(k[,d]) -> D[k]의 경우 k가 D이면 D.d는 디폴트로 없음입니다.
|...

사용

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

하다를 돼요.get()dict 표시

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

하면 이이 this 가 됩니다.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

이런 경우에는 보통 defaultdict를 사용합니다.인수를 사용하지 않고 새 키가 발견되면 값을 생성하는 공장 메서드를 제공합니다.새 키의 빈 목록과 같은 항목을 반환하려는 경우 더 유용합니다(예 참조).

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

위에서 설명한 바와 같이 get()을 사용할 수 있습니다.

그러나 키를 확인하려면 다음 작업을 수행할 수도 있습니다.

d = {}
if 'keyname' in d:

    # d['keyname'] exists
    pass

else:

    # d['keyname'] does not exist
    pass

하면 됩니다.dict의 ★★★★★★★★★★★★★★」get()다른 사람들이 이미 제안했듯이, 방법., 「」, 「」를 .try/except다음과 같이 합니다.

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

사건을 다루는 데 매우 "피토닉"한 접근법으로 간주됩니다.

한 줄의 솔루션은 다음과 같습니다.

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

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

예:

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

를 사용하는 사용자dict.get사전의 모든 수준을 명시적으로 확인하거나 확장하지 않고 중첩된 사전을 위한 기술dictclass 기본 반환값을 맨 끝 수준을 제외한 빈 딕셔너리로 설정할 수 있습니다.다음은 예를 제시하겠습니다.

my_dict = {'level_1': {
             'level_2': {
                  'level_3': 'more_data'
                  }
              }
           }
result = my_dict.get('level_1', {}).get('level_2', {}).get('level_3')
# result -> 'more_data'
none_result = my_dict.get('level_1', {}).get('what_level', {}).get('level_3')
# none_result -> None

경고: 이 기술은 예상된 키의 값이 사전인 경우에만 작동합니다.열쇠가what_level사전에는 존재했지만 그 값은 문자열이나 정수 등이었다.그러면 그 값이 올라갔을 것이다.AttributeError.

저는 python2 vs python3에서 가능한 것에 놀랐습니다.python3에 대해 제가 하게 된 것에 따라 답변하겠습니다.제 목표는 단순했습니다. 사전 형식의 json 응답에 오류가 있는지 확인합니다.내 사전은 "token"이고 내가 찾는 키는 "error"입니다.키 "에러"를 찾고 있는데, 이 키가 [없음]으로 설정되어 있지 않은 경우 체크는 [없음]으로 되어 있습니다.그렇다면 제 코드로 진행됩니다.키가 "error"인 경우 다른 명령어로 처리됩니다.

if ((token.get('error', None)) is None):
    do something

try-except 블록을 사용할 수 있습니다.

try:
    value = dict['keyname']

except IndexError:
    value = None
  1. d1={"원":1", "투":2", "쓰리":3

  2. d1.get("Four")

이 코드를 실행하면 'Keyerror'가 발생하지 않습니다.즉, 'dict.get'을 사용하여 오류를 방지하고 코드를 실행할 수 있습니다.

캐시에 상당하는 보다 복잡한 요건이 있는 경우, 이 클래스가 편리할 수 있습니다.

class Cache(dict):
    """ Provide a dictionary based cache

        Pass a function to the constructor that accepts a key and returns
        a value.  This function will be called exactly once for any key
        required of the cache.
    """

    def __init__(self, fn):
        super()
        self._fn = fn

    def __getitem__(self, key):
        try:
            return super().__getitem__(key)
        except KeyError:
            value = self[key] = self._fn(key)
            return value

생성자는 키로 호출되는 함수를 가져와서 사전의 값을 반환해야 합니다.그런 다음 이 값이 저장되고 다음 번에 사전에서 검색됩니다.이렇게 쓰면...

def get_from_database(name):
    # Do expensive thing to retrieve the value from somewhere
    return value

answer = Cache(get_from_database)
x = answer(42)   # Gets the value from the database
x = answer(42)   # Gets the value directly from the dictionary

할 수 있다면False다음으로 hasattr 내장기능이 있습니다.

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

언급URL : https://stackoverflow.com/questions/6130768/return-a-default-value-if-a-dictionary-key-is-not-available

반응형