2014-09-17 5 views
1

두 파일 중 하나는 Keys이고 하나는 Key and Value입니다. 키 파일에 해당 값을 추가하거나 키 및 해당 값이있는 새 출력 파일을 만들려고합니다. 개별적으로 나는 열쇠와 가치를 완벽하게 읽을 수 있습니다. 나는이 둘을 하나로 합칠 때 문제가있다. 아래 코드는 함께 끝 값을 보여줍니다. 나는 for 루프가 끝나고 for second 루프가 시작된다는 것을 이해한다. 이것이 내가 키와 값 파일에서 마지막 항목 만 얻는 이유입니다. 이 문제를 어떻게 간단하게 해결할 수 있습니까?새 사전 추가 또는 작성

from collections import defaultdict 

with open('input1', 'r') as classified_data: 
    with open('input2', 'r') as edge_data:  
     with open('output', 'w') as outfile: 
     for row in classified_data: 
      col = row.strip().split() 
      key = col[0], col[1] 
      #print key 
     for row in edge_data: 
      col = row.strip().split()   
      value = col[2], col[3], col[4] 
      #print value 
     print {key:value} 

입력 1 :

3545 4945 
3545 2814 
3545 5045 
3545 4921 
3545 2564 
3545 2311 
3545 1644 
3545 3820 
3545 388 
3545 928 
3545 3626 
3545 1191 
3545 4243 
3545 3867 
3545 701 

입력 2 :

4945 3545 57 250848.0 4400.84210526 
3584 292 5 1645.0 329.0 
4824 2283 5 16867.0 3373.4 
1715 55 1 681.0 681.0 
5409 2822 2 3221.0 1610.5 
4955 656 6 3348.0 558.0 
4157 487 1 201.0 201.0 
2628 309 2 2466.0 1233.0 
3929 300 2 1742.0 871.0 
3730 489 12 10706.0 892.166666667 
5474 2336 2 1533.0 766.5 
3877 716 10 45028.0 4502.8 
3058 3045 12 17328.0 1444.0 
+0

첫 번째 파일의 줄과 두 번째 줄의 줄을 어떻게 연관시키는지는 완전히 명확하지 않습니다. 첫 번째 파일의 1 번 줄은 두 번째 파일의 1 번 줄과 관련이 있습니까? – goncalopp

+0

@ goncalopp 아니요. files2의 키 쌍으로 file1에서 키 쌍을 검색하고 file2에서 해당 값을 가져 와서 인쇄해야합니다. –

답변

0

첫 번째 파일에서 가져온 키를 사용하여 두 번째 파일의 데이터에서 많은 조회를 수행하려는 것처럼 들립니다.

다음
edges = {} 
with open('input2', 'r') as edge_data:  
    for row in edge_data: 
     col = row.strip().split() 
     edges[col[0], col[1]] = col[2], col[3], col[4] 

이 할 : 그런 경우, 당신은 그때 당신은 조회에 사용됩니다 키를 사전에 두 번째 파일을 읽어 보시기 바랍니다, 메모리에서 두 번째로 파일을 넣을 수 있다고 가정 쿼리는 첫 번째 파일을 읽어와 일치 인쇄 : 당신이, 당신은 명시 적으로 두 조합을 시도하는 코드의 마지막 조각을 수정할 수 있습니다 숫자의 순서 중 하나에 따라 키를 일치 시키려면

with open('input1', 'r') as classified_data: 
    for row in classified_data: 
     key = tuple(row.strip().split()) 
     print key, edges.get(key) 

를 :

with open('input1', 'r') as classified_data: 
    for row in classified_data: 
     a, b = row.strip().split() 
     print a, b, edges.get((a, b), edges.get((b, a))) 
+0

오류 :'Traceback (최근 호출 마지막) : 12 행 12의 에있는 파일 "dict_one.py"인쇄 키, 가장자리 [key] KeyError : ('3545', '4945') '키가 있음 두 파일 모두에서 –

+0

흠, KeyError는 그렇지 않은 것으로 나타납니다. "input2"파일에 키가 있는지 확인 하시겠습니까? 질문에 게시 한 예제 입력에서 해당 키는 실제로 input2에 없습니다. (실제로 3545로 시작하는 것은 input2에 존재하지 않습니다!) – lmjohns3

+0

방금 ​​KeyError가 발생하지 않도록 코드를 업데이트했습니다. 이제 모든 키에 대해 'None'을 인쇄 할 수 있습니다. – lmjohns3

0

무엇 딕셔너리로 ​​압축하는, 튜플의 목록 및 결국 키와 값을 수집 어떻습니까?

from collections import defaultdict 

keys = [] 
values = [] 

with open('input1', 'r') as classified_data: 
    # with open('output', 'w') as outfile: 
    for row in classified_data: 
     col = row.strip().split() 
     keys.append((col[0], col[1])) 
     # print key 
with open('input2', 'r') as edge_data:  
    for row in edge_data: 
     col = row.strip().split()   
     values.append((col[2], col[3], col[4])) 
     # print value 

print dict(zip(keys,values)) 
+0

잘못된 값을가집니다. –

+0

그때 나는 당신의 질문을 얻지 못했습니다 ... 나는 당신이 input1의 첫번째 줄을 key로 넣고 input2의 첫번째 줄을 새로운 사전의 값으로 넣고 싶다고 생각했습니다. – Max