사전 키를 사용할 수 없는 경우 기본값 반환
, 할 수 방법이 합니다.None
(일부러)
Python은 「Python」을 .KeyError
존재하지 않는 키를 검색하는 경우 예외입니다.키를 확인할 수 있다는 것은 알지만, 좀 더 명확한 것을 찾고 있습니다. 돌려주는 요?None
가가존 재재 ?? ???
사용할 수 있습니다.
value = d.get(key)
은 반환될 것이다.None
key 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
사전의 모든 수준을 명시적으로 확인하거나 확장하지 않고 중첩된 사전을 위한 기술dict
class 기본 반환값을 맨 끝 수준을 제외한 빈 딕셔너리로 설정할 수 있습니다.다음은 예를 제시하겠습니다.
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
d1={"원":1", "투":2", "쓰리":3
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
'itsource' 카테고리의 다른 글
webpack-cli 오류: 규칙 집합을 컴파일하지 못했습니다. (0) | 2022.09.04 |
---|---|
JavaScript에서 어레이를 비우려면 어떻게 해야 합니까? (0) | 2022.09.04 |
값이 변경된 값 및 열을 선택하십시오. (0) | 2022.09.04 |
프라이머리 키를 1000부터 시작하는 방법 (0) | 2022.09.04 |
jQuery UI 대화상자 - 닫기 아이콘 누락 (0) | 2022.09.04 |