자연 첨자와 3 차원 OrderedDict 만들기 :나는 다음과 같은 속성이 사전 구조를 원하는
- 사물의 순서를 기억한다 이중 (너무 많은 단어 너무, 3 차원) 중첩 내가 지금처럼 항목을 추가하는 경우,
그래서 각 레벨을 위해 추가 :
# d = something dict-ish
d['a']['b']['c'] = 'd'
d['a'][1][2] = 3
d['f']['g']['e'] = 'g'
d['f'][5][6] = 7
d['a']['foo']['bar'] = 'hello world'
다음과 같은 이해의 결과는 :
[(i, j, k, d[i][j][k]) for i in d for j in d[i] for k in d[i][j]]
은 다음과 같습니다
[('a', 'b', 'c', 'd'), ('a', 1, 2, 3), ('a', 'foo', 'bar', 'hello world'), ('f', 'g', 'e', 'g'), ('f', 5, 6, 7)]
나는 내가 그것을 긴 입력하지 않아도 새로운 키에이 구조를 강화하기 위해 defaultdict
를 사용하여 시도했다 방법과 같이 :
# long way
d = OrderedDict()
d['a'] = OrderedDict([('b', OrderedDict([('c', 'd')]))])
d['a'][1] = OrderedDict([(2,3)])
# tried to use defaultdict
d = defaultdict(lambda: defaultdict(lambda: OrderedDict()))
d['a']['b']['c'] = 'd'
d['a'][1][2] = 3
그러나 defaultdict
상단 두 단계의 순서를 기억하지 않습니다. 나는 어떻게 행동을 병합 할 지 모르겠다. 그래서 분명히 상위 2 레벨은 d
을 그렇게 선언했기 때문에 defaultdict
행동을 산출하고있다. 내가 원하는 구조를 어떻게 얻을 수 있습니까? 존재하는 경우
from collections import OrderedDict
class DefaultOrderedDict(OrderedDict):
def __missing__(self, key):
self[key] = type(self)()
return self[key]
기본dict
유형이 defaultdict
유형 사용을 만드는 것입니다 KeyError
을 제기하기 전에 __missing__
메소드를 호출 :
@MartijnPieters. – 2rs2ts