Python에서 변수가 사전인지 확인하는 방법은 무엇입니까?
Python에서 변수가 사전인지 어떤지를 어떻게 확인하시겠습니까?
예를 들어, 사전을 찾을 때까지 사전의 값을 반복하고 싶습니다.그런 다음 발견된 항목을 루핑합니다.
dict = {'abc': 'abc', 'def': {'ghi': 'ghi', 'jkl': 'jkl'}}
for k, v in dict.iteritems():
if ###check if v is a dictionary:
for k, v in v.iteritems():
print(k, ' ', v)
else:
print(k, ' ', v)
사용할 수 있습니다.if type(ele) is dict
또는 만약 당신이 하위 분류를 했다면 효과가 있었을 것이다.dict
:
d = {'abc': 'abc', 'def': {'ghi': 'ghi', 'jkl': 'jkl'}}
for element in d.values():
if isinstance(element, dict):
for k, v in element.items():
print(k,' ',v)
Python에서 변수가 사전인지 어떤지를 어떻게 확인하시겠습니까?
이것은 훌륭한 질문입니다만, 유감스럽게도 가장 높은 표를 얻은 답변은 추천이 불충분합니다.type(obj) is dict
.
(또,dict
변수 이름으로 지정합니다.기본 객체의 이름입니다.)
다른 사용자가 Import하여 사용하는 코드를 기술할 경우, 사용자가 직접 dict builtin을 사용할 것으로 추측하지 마십시오.이 경우 코드를 더 유연하지 않게 하고 프로그램을 오류 발생시키지 않는 쉽게 숨겨진 버그를 만듭니다.
향후 사용자를 위한 정확성, 유지보수성 및 유연성을 위해 보다 유연하고 관용적인 표현이 있을 경우 코드에 덜 유연하고 비자동적인 표현을 사용할 것을 강력히 권장합니다.
is
는 오브젝트 ID 테스트입니다.상속도 지원되지 않고 추상화도 지원되지 않으며 인터페이스도 지원되지 않습니다.
몇 가지 옵션을 제시하겠습니다.
지원 상속:
이것은 사용자가 자신의 서브클래스인 dict를 제공할 수 있기 때문에 제가 제안하는 첫 번째 권장 사항입니다.OrderedDict
,defaultdict
, 또는Counter
다음 명령어를 사용합니다.
if isinstance(any_object, dict):
하지만 훨씬 더 유연한 옵션이 있습니다.
지원 추상화:
from collections.abc import Mapping
if isinstance(any_object, Mapping):
이를 통해 코드 사용자는 추상 매핑의 사용자 정의 구현을 사용할 수 있습니다. 추상 매핑은 다음 하위 클래스도 포함합니다.dict
올바른 동작을 얻을 수 있습니다.
인터페이스 사용
OOP 어드바이스는 일반적으로 "program to a interface"라고 합니다.
이 전략은 Python의 다형성 또는 오리 타이핑을 활용합니다.
그 때문에, 인터페이스에의 액세스를 시도하고, 예상되는 특정의 에러를 검출합니다( ).AttributeError
없는 경우에 대비해서.items
그리고.TypeError
경우에.items
적절한 폴백을 수반하는 콜 불능) - 이제 해당 인터페이스를 구현하는 클래스는 해당 항목을 제공합니다(주의)..iteritems()
Python 3) python python python python python python python python python python python python 。
try:
items = any_object.items()
except (AttributeError, TypeError):
non_items_behavior(any_object)
else: # no exception raised
for item in items: ...
이와 같은 duck-type을 사용하는 것은 너무 많은 false positive를 허용하기 때문에 이 코드의 목적에 따라서는 너무 많은 false positive를 허용할 수 있다고 생각할 수 있습니다.
결론
마세요is
표준 제어 흐름의 유형을 확인합니다.isinstance
, 하다, 하다, 하다와 같은 을 고려합니다.Mapping
★★★★★★★★★★★★★★★★★」MutableMapping
인터페이스를 직접 사용하여 타입 체크를 회피하는 것을 검토해 주십시오.
python 3.6에서는
typeVariable = type(variable)
print('comparison',typeVariable == dict)
if typeVariable == dict:
#'true'
else:
#'false'
테스트 결과 다음과 같은 유형의 힌트가 있습니다.
from typing import Dict
if isinstance(my_dict, Dict):
# True
else:
# False
타이핑에 대한 몇 가지 설명을 곁들이겠습니다.여기서 받아쓰기
OP는 시작 변수를 제외하지 않았으므로, 여기서 완전성을 위해 항목을 사전으로 포함할 수 있는 가정된 사전을 처리하는 일반적인 경우를 처리하는 방법을 설명합니다.
또한 Python(3.8)이 권장하는 사전 테스트 방법을 위의 코멘트에 따릅니다.
from collections.abc import Mapping
my_dict = {'abc': 'abc', 'def': {'ghi': 'ghi', 'jkl': 'jkl'}}
def parse_dict(in_dict):
if isinstance(in_dict, Mapping):
for k_outer, v_outer in in_dict.items():
if isinstance(v_outer, Mapping):
for k_inner, v_inner in v_outer.items():
print(k_inner, v_inner)
else:
print(k_outer, v_outer)
parse_dict(my_dict)
언급URL : https://stackoverflow.com/questions/25231989/how-to-check-if-a-variable-is-a-dictionary-in-python
'source' 카테고리의 다른 글
날짜/시간 값을 문자열로 변환 (0) | 2022.11.16 |
---|---|
MariaDB 영구 변수 설정 (0) | 2022.11.16 |
값이 소문자를 포함하는 행을 찾는 방법 (0) | 2022.11.16 |
MySQL Alter 테이블에서 오류가 발생했습니다.잘못된 NULL 값 사용 (0) | 2022.11.16 |
Java를 사용하여 큰 텍스트 파일을 한 줄씩 읽는 방법은 무엇입니까? (0) | 2022.11.16 |