2014-11-09 3 views
0

사전을 사용하여 사전을 만들고 해당 값을 CSV 파일에서 가져 오려고했습니다. 나는 다음과 같이 해당 사전을 채우기 위해 노력하고 각 등급에 대한Python에서 for 루프를 사용하여 중첩 된 사전 만들기

6,100 
8,150 
10,200 

:

내가이 유사하다 다른 평가 (150,300,600)에 대한 3 개 CSV 파일, 각 있다고 가정

{6 : 100,8 150, ...}, {300 6 : 140
Rating={150,300,600} 
npd = {} 
temp={} 
flg={} 
flg150={} 
flg300={} 
flg600={} 

print(flg) 
for k in Rating: 
    print(k) 
    reader=csv.reader(open(str(k)+'.csv')) 
    for x in reader: 
     key=x[0] 
     temp[key]=x[1] 
    print(temp) 
    flg[k]=temp 
    print(flg[k]) 
print(flg) 

는 I 화합물은 하나 사전

FLG = {150, 즉 생성 생각 8 : 160 ...} 등, 등}

하고 사전 분리 값을 할당한다

flg150 = flg.get (150)

을 문제 그것을 실행할 때 flg dict는 모든 키에 대해 동일한 값으로 끝납니다.

{} 
600 
{'8': '210', '6': '160', '10': '260'} 
{'8': '210', '6': '160', '10': '260'} 
300 
{'8': '190', '6': '140', '10': '240'} 
{'8': '190', '6': '140', '10': '240'} 
150 
{'8': '170', '6': '120', '10': '220'} 
{'8': '170', '6': '120', '10': '220'} 
{600: {'8': '170', '6': '120', '10': '220'}, 300: {'8': '170', '6': '120', '10': '220'}, 150: {'8': '170', '6': '120', '10': '220'}} 

여기서 내가 뭘 잘못하고 있니? 그리고 좀 더 우아하게 만들 수있는 방법이 있나요? 왜냐하면 저에게보기 흉한 것처럼 보이기 때문입니다 ...?

답변

2

for 루프로 temp = {}을 이동하면 새 파일을 읽을 때마다 새 개체가 만들어집니다. 그렇지 않으면 값이 각 반복마다 유지되도록 동일한 임시 객체를 재사용하는 것입니다.

for k in Rating: 
    temp={} 
    print(k) 
    reader=csv.reader(open(str(k)+'.csv')) 
    for x in reader: 
     key=x[0] 
     temp[key]=x[1] 
    print(temp) 
    flg[k]=temp 
    print(flg[k]) 
print(flg) 

각 반복마다 동일한 임시 사전을 업데이트하고있었습니다. 임시 사전 내의 키 값의 경우 값을 겹쳐 쓰려고했습니다. 새 키 값의 경우 새 항목을 추가하고있었습니다. 각각의 경우에 마지막으로 쓰여진 값을 인쇄 했으므로 물론 올바르지 만 이전 항목을 덮어 쓰는 것이 었습니다. 새 코드와 이전 코드를 반복 할 때마다 반복문 끝에 flg (flg [k]가 아님)를 인쇄 해보고 차이점을 비교해보십시오. 무슨 일이 일어 났는지 분명히해야합니다

+0

그것은 작동하지만, 나는 완전히 차이를 이해한다고 말할 수 없습니다. 내가 flg [k]를 인쇄 할 때 나는 올바른 값을 얻을 것입니다. 왜 잘못되었는지 자세히 설명해 주시겠습니까? 솔루션을 제공해 주셔서 감사합니다. – user2132792

+0

flg에 대한 출력은 {600 : { '8': '170', '6': '120', '10': '220'}, 300 : { '8': '170' : '120', '10': '220'}, 150 : { '8': '170', '6': '120', '10': '220'}}. 각 하위 항목은 동일한 값을가집니다. 그 이유는 각 키 (150,300,600)가 동일한 임시 사전에 설정되어 있기 때문입니다. – tiktok

+0

필자는 flg [k] 출력이 매번 temp와 같다고 생각하여 print (temp) 및 print (flg [k])에서 호출 된 중복 줄이 인쇄 된 이유입니다. 올바른 값이 할당되었습니다 ... 지금 당신이 의미하는 바를 봅니다. 도움을 주셔서 감사합니다. – user2132792

관련 문제