2014-04-30 3 views
1

우선 나는 다음 질문을 해결하기 위해 해결할 제안을 찾을 수 없었습니다. 따라서 누군가가 이미 응답 한 경우 그 문제를 해결해주십시오.python 동적으로 dicts 사전을 작성하십시오

다른 사전들로 구성된 사전을 "동적으로"만들려고합니다. (이 마지막 것들은 json을 통해 얻은 데이터입니다.); 내가 쓴 코드는

{ 
'D2Key1': {'D1Key1': 'Data11', 'D1Key2': 'Data21', 'D1Key3': 'Data31'}, 
'D2Key2': {'D1Key1': 'Data12', 'D1Key2': 'Data22', 'D1Key3': 'Data32'}, 
'D2Key3': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'} 
} 

입니다 : 다음 어쨌든 내가 달성하기 위해 노력하고있어 결과가됩니다

for n in range(3): 
    D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n 
    D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n 
    D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n 

    D2['%s%d' % ('D2key', n+1)] = D1 

내가 얻을 결과는 세 가지 사전으로 채워 사전하지만 그 모든가 동일한 데이터, 마지막 반복에서 얻은 데이터, 즉 다음과 같은 데이터 :

{ 
'D2Key1': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}, 
'D2Key2': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}, 
'D2Key3': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'} 
} 

누군가 올바른 방향으로 나를 처리 할 수 ​​있습니까? 감사합니다

+0

정확히 pjson입니까? – acushner

답변

1

예, 이런 식으로해야하는 경우 D1을 다시 설정해야합니다. 그렇지 않으면 포인터가 그대로 유지되고 D2의 모든 키가 같은 D1로 지정됩니다. 수정 방법은 다음과 같습니다.

for n in range(3): 
    D1 = {} 
    D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n 
    D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n 
    D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n 

    D2['%s%d' % ('D2key', n+1)] = D1 
+0

감사합니다. 엘리와 다른 모든 사람들에게 감사의 말을 전합니다. r08y – r08y

1

이것은 일반적인 오류입니다. D2의 모든 키가 동일한 객체 D1에 할당됩니다. 그런 다음 D1 반복을 계속 수정합니다.

각 반복마다 다른 사전을 지정하려고합니다. for 루프의 첫 번째 행에 D1 = {}을 추가하십시오.

1

이것은 for 루프 내부에서 동일한 dict D1을 참조하기 때문일 수 있습니다. 각 반복마다 새로운 사전을 만들어야한다고 생각합니다. 이런 식으로 뭔가 :

for n in range(3): 
    D1 = {} 
    D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n 
    D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n 
    D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n 

    D2['%s%d' % ('D2key', n+1)] = D1 
0

이 줄

D2['%s%d' % ('D2key', n+1)] = D1 

은 잘못된 것입니다. 당신은 항상 변경 가능한 유형 인 사전을 가리키고 있습니다. 먼저 결과를 복사하여 사전 D2에 추가해야합니다.

각 루프에서 새 사전을 작성하고 키를 채운 다음 사전 D2에 추가하는 위치를 선택하십시오.

for n in range(3): 
    d1 = {} # notice here this is what you need to add. 
    d1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n 
    d1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n 
    d1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n 
    d2['%s%d' % ('D2key', n+1)] = d1 
관련 문제