2014-06-24 4 views
1

튜플 ('a', b ','c ')을 가져 와서 다음과 같은 계층화 된 사전을 만듭니다. {'a ': {'b ' { 'c': {}}}}. 내가 재귀를 사용하고 있습니다. 스크립트의 각 단계 이후에 사전을 인쇄 할 때 (대부분 디버깅 목적으로 만 인쇄됩니다) 사전이 올바르게 작성되고 있음을 보여 주지만 그 후에는 분리되어 잘못된 것으로 표시됩니다. 내가 남긴 사전은 { 'c': {}}입니다. 재귀 부분에 뭔가 부적절한 일을해야합니다. 어떤 도움이라도 대단히 감사 할 것입니다.반복적으로 튜플에서 파이썬 사전에 추가합니다.

데프 incr_dict (DCT, TPL) :

if len(tpl) == 0: 
    dct = dct 
    print(dct) 
    print('1') 
else: 
    dct = {tpl[-1]:dct} 
    print(dct) 
    print('2') 
    incr_dict(dct, tpl[0:-1]) 

print(dct) 
print('3') 
return dct 

DCT = {} = ('A', 'B', 'C') TPL

DCT = 여기 내 코드 incr_dict (DCT, TPL)

인쇄 (DCT) 인쇄 ('4')

답변

1

당신은 거기 거의 다있어! incr_dict(dct, tpl[0:-1]) 행을 return incr_dict(dct, tpl[0:-1])으로 변경하십시오. 나는 그것이 문제를 해결할 것이라고 믿는다.

재귀를 사용할 때 재귀 호출을 반환하는 것이 중요합니다. 그렇지 않으면 재귀의 '상위 수준'에서 새 정보를 사용할 수 없습니다. 재귀를 반환하면 종료 조건이 충족 될 때까지 실행이 반복되어 계산 된 값이 함수의 첫 번째 호출에서 최종적으로 반환 될 때까지 체인에서 반환되기 시작합니다. 다음과 같이


마지막 코드는 같아야합니다

def incr_dict(dct, tpl): 
    if len(tpl) == 0: 
     dct = dct 
    else: 
     dct = {tpl[-1]:dct} 
     return incr_dict(dct, tpl[0:-1]) 

    return dct 

dct = {} 
tpl = ('a', 'b', 'c') 

dct=incr_dict(dct, tpl) 

print(dct) 

나는 명확성을 위해 디버깅 문장의 일부를 제거했습니다.

+0

대단히 감사합니다. 훌륭하게 작동합니다. 나는 너무 오래 꼼짝 않고 바라 보았 기 때문에 나는 잡을 수없는 작은 오류라는 것을 알았다. (이것은 여름 첫날의 코딩을 멈추었을 때 일어나는 일이다.). – user1320737

관련 문제