检索并组合多个字典条目

时间:2012-07-23 16:17:48

标签: python parsing dictionary

我有一对像这样的值的文件:

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())的各种组合,但不能做我想要的。 我很确定它是这样的,但由于我是编程新手,我似乎无法做到正确。 有什么想法吗?

2 个答案:

答案 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')]