2012-07-23 16 views
0

我有文件,對值會是這樣的:檢索和組合多個詞典條目

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

我一直在使用這樣的:

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 

然後試着用while循環,for循環,用各種組合範圍(len()),但不能做我想要的。 我很確定它是這樣,但由於我是編程新手,我似乎無法做到。 有什麼想法?

回答

1

兩個嵌套的for循環應該做你想要什麼:

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

這是驚人的!我只用一個循環,我知道它不會讓我到任何地方。但我不確定我是否理解你剛剛做了什麼,即使它有效。 你可以'翻譯'它嗎?非常感激! – 2012-07-23 16:42:48

+0

@EdwardCoelho:這基本上就是代碼所說的:「對於data [columns [0]]中的每個'x',迭代'data [columns [1]]'中的每個'y'。 – 2012-07-23 16:59:37

+0

哦,我太傻了。謝謝,現在這很合乎邏輯。 – 2012-07-24 10:05:34

1

您可以使用list comprehensions做到這一點:然後

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

值將是你想要的對的列表:

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

非常非常好。很棒!對列表工具進行了大量研究,但沒有遇到列表解析。 感謝您的領導! – 2012-07-23 16:44:37