데이터 구조는 다음과 같습니다 (일반적으로 사전처럼 정렬되지 않음).
{ 'b': { '2': 0.02}, 'a': { '1': 0.01}}
그러한 사전을 만들 때, 파이썬에서 d [ "b"]를 참조하기 전에 'b'가 있는지 확인하지 않는 것은 올바르지 않습니다. d [ "b"] [ "2"] = float (0.02)를 사용하여 'b'로 입력 된 사전에 '2'키를 추가하는 것은 올바르지 않습니다.
다음은이 상황을 설명하는 코드입니다. 주석 처리 된 두 줄을 무시하고 코드는 텍스트 줄을 분할하고 중첩 된 사전을 구성합니다. 즉, 사전의 사전입니다.
d가 단순 사전 (중첩 없음)이면 두 개의 주석 처리 된 행이 작동합니다. 'a'와 'b'가 있는지 확인할 필요가 없습니다.
설명은 무엇입니까?
def f():
d = {}
m = ["a 1 0.01", "b 2 0.02"]
#d["a"] = 1
#d["b"] = 2
for i in range(2):
(m0,m1,m2) = m[i].split()
if m0 not in d:
d[m0] = {}
d[m0][m1] = float(m2)
차이점은
d["b"] = 2
호출을 나타내는 d.__setitem__("b", 2)
반면
print d["b"]
대표하다
d.__getitem__("b")
"b"가에서 아직 키가 아닌 dict
경우 첫 번째는 단순히 키를 추가하고 두 번째는 a를 발생 KeyError
시킵니다.
당신의 라인,
d["b"]["2"] = float(0.02)
하지만 왼쪽에서 오른쪽으로 평가됩니다. 다음과 동일하게 구문 분석됩니다.
(d["b"])["2"] = float(0.02)
이는 d.__getitem__("b")
결과가를 호출하기 전에 성공해야 함을 의미 합니다 __setitem__
. 다음과 같습니다.
d.__getitem__("b").__setitem__("2", float(0.02))
제쳐두고, 파이썬이 진정한 "다차원"사전을 지원한다면, 같은 것들이와 같은 d["b"]["2"] = float(0.02)
것에 매핑 될 것이고 d.__setitem__("b", "2", float(0.02))
대부분의 사용은 defaultdict
불필요해질 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다