0

我有成对值的文件,如下所示:

123    456
84665   88
90  2339
2624    5371
6118    6774

我还有一本字典,其中几个键包含多个值,由列表表示。例子:

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

现在,我想要做的是,对于pairs 行中的每个条目(例如: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 循环以及 range(len()) 的各种组合,但无法做到我想要的。我很确定它是这样的,但由于我是编程新手,我似乎无法做到正确。有什么想法吗?

4

2 回答 2

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

根据您想要执行的操作,您还可以使用带有嵌套 for 循环的列表推导式或itertools.product().

于 2012-07-23T16:21:47.850 回答
1

您可以使用列表推导来执行此操作:

(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')]
于 2012-07-23T16:26:34.417 回答