我有一对像这样的值的文件:
123 456
84665 88
90 2339
2624 5371
6118 6774
我还有一个字典,其中几个键包含多个值,由列表表示。例如:
{123: ['A1B1C1', '2X3P4T5O'], 456: ['C5H5J8F3', 'D3K21F9', 'F1N5NA3']}
现在,我想要做的是,对于成对行中的每个条目(例如:123
和456
),获取此信息:
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())的各种组合,但不能做我想要的。 我很确定它是这样的,但由于我是编程新手,我似乎无法做到正确。 有什么想法吗?
答案 0 :(得分: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()
一起使用。
答案 1 :(得分: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')]