Python 检索和组合多个词典条目

Python 检索和组合多个词典条目,python,parsing,dictionary,Python,Parsing,Dictionary,我有一个文件,其中有两对值,如下所示: 123 456 84665 88 90 2339 2624 5371 6118 6774 我还有一个字典,其中几个键包含一个以上的值,由一个列表表示。例如: {123: ['A1B1C1', '2X3P4T5O'], 456: ['C5H5J8F3', 'D3K21F9', 'F1N5NA3']} 现在,我想做的是,对于pairs行中的每个条目(例如:123和456),获得以下信息: A1B1C1 C5H5J8F3 A1B1C1

我有一个文件,其中有两对值,如下所示:

123    456
84665   88
90  2339
2624    5371
6118    6774
我还有一个字典,其中几个键包含一个以上的值,由一个列表表示。例如:

{123: ['A1B1C1', '2X3P4T5O'], 456: ['C5H5J8F3', 'D3K21F9', 'F1N5NA3']}
现在,我想做的是,对于pairs行中的每个条目(例如:
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()),但无法实现我想要的。 我很确定它是这样的,但由于我是编程新手,我似乎不能正确地理解它。
有什么想法吗?

两个嵌套的for循环可以满足您的需要:

for line in infile:
    columns = line.strip().split()
    for x in data[columns[0]]:
        for y in data[columns[1]]:
            print x, y
[('A1B1C1', 'C5H5J8F3'), ('A1B1C1', 'D3K21F9'), ('A1B1C1', 'F1N5NA3'), ('2X3P4T5O', 'C5H5J8F3'), ('2X3P4T5O', 'D3K21F9'), ('2X3P4T5O', 'F1N5NA3')]
根据您要执行的操作,还可以使用嵌套for循环的列表理解或
itertools.product()

(a, b) = [data[x] for x in column]
values = [(x, y) for x in a for y in b]
然后,值将是所需对的列表:

for line in infile:
    columns = line.strip().split()
    for x in data[columns[0]]:
        for y in data[columns[1]]:
            print x, y
[('A1B1C1', 'C5H5J8F3'), ('A1B1C1', 'D3K21F9'), ('A1B1C1', 'F1N5NA3'), ('2X3P4T5O', 'C5H5J8F3'), ('2X3P4T5O', 'D3K21F9'), ('2X3P4T5O', 'F1N5NA3')]

太棒了!我只使用了一个for循环,我知道这不会让我有任何进展。但我不确定我是否理解你刚才所做的,即使它有效。你能“翻译”它吗?非常感谢@爱德华·科埃略:基本上就是代码所说的:“对于
data[columns[0]]
中的每个
x
,在
data[columns[1]
中迭代每个
y
”非常非常好。很好!对列表工具做了大量的研究,但没有发现列表理解。谢谢你的提醒!