2012-07-23 5 views
0

I는 다음과 같이 진행 값의 쌍 파일이 :검색 및 결합 여러 개의 사전 항목은

123 456 
84665 88 
90 2339 
2624 5371 
6118 6774 

나는 또한 여러 개의 키가 목록으로 표시 하나 개 이상의 값을 포함하는 사전을 가지고있다. 예 : 내가하고 싶은 것을

이제
{123: ['A1B1C1', '2X3P4T5O'], 456: ['C5H5J8F3', 'D3K21F9', 'F1N5NA3']} 

는, 쌍 라인의 각 항목에 대해, (예 : 123456),이 얻을 :

모든 단일 값을 결합이다
A1B1C1 C5H5J8F3 
A1B1C1 D3K21F9 
A1B1C1 F1N5NA3 
2X3P4T5O C5H5J8F 
2X3P4T5O D3K21F9 
2X3P4T5O F1N5NA3 

123 키에서 456 키의 모든 단일 값으로. 일부 키는 하나 개의 값을 가지고,하지만이 작업을 봤는데 많은

6. 같은 다른 키를 가지고 : while 루프, for 루프의 다양한 조합으로 사용

for line in infile: 
     lread += 1 
     column = line.strip().split('\t') 

     value1 = data.__getitem__(column[0]) 
     value2 = data.__getitem__(column[1]) 
     total1 = len(value1) 
     total2 = len(value2) 
     num1 = 0 
     num2 = 0 

을 그리고 시도 범위 (len()),하지만 내가 원하는대로 할 수 없습니다. 나는 그것이 그런 식으로 진행될 것이라고 확신하지만, 프로그래밍에 익숙하지 않아서 제대로 할 수없는 것처럼 보인다. 의견이 있으십니까?

답변

1

두 중첩에 대한-루프 당신이 원하는 것을 수행해야합니다

for line in infile: 
    columns = line.strip().split() 
    for x in data[columns[0]]: 
     for y in data[columns[1]]: 
      print x, y 

수행하려는 작업에 따라, 당신은 또한에 대한 루프 또는 itertools.product() 중첩와 지능형리스트를 사용할 수 있습니다.

+0

:

(a, b) = [data[x] for x in column] values = [(x, y) for x in a for y in b] 

값은 다음 원하는 쌍 목록이 될 것이다! 나는 하나의 루프를 사용하고 있었고 어디에서나 나를 얻을 수 없다는 것을 알았습니다. 그러나 그것이 효과가 있다고하더라도, 내가 한 일을 이해하는지 잘 모르겠습니다. 번역 해 드릴까요? 매우 감사! –

+0

@EdwardCoelho : 기본적으로 코드는 "data [columns [0]]의 각'x '에 대해'data [columns [1]]의 각'y'를 반복합니다." –

+0

오, 나는 너무 어리 석다. 고마워, 그건 꽤 논리적이다. –

1

이 작업을 수행 할 list comprehensions를 사용할 수 있습니다 놀라운

[('A1B1C1', 'C5H5J8F3'), ('A1B1C1', 'D3K21F9'), ('A1B1C1', 'F1N5NA3'), ('2X3P4T5O', 'C5H5J8F3'), ('2X3P4T5O', 'D3K21F9'), ('2X3P4T5O', 'F1N5NA3')] 
+0

매우 훌륭합니다. 위대한 작품! 목록 도구에 대한 많은 연구를했으나 목록 내포물을 발견하지 못했습니다. 머리를 주셔서 감사합니다! –

관련 문제