0

次のような値のペアを含むファイルがあります。

123    456
84665   88
90  2339
2624    5371
6118    6774

リストで表される複数のキーが複数のキーに含まれる辞書もあります。例:

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

今、私がやりたいことは、ペア行の各エントリ (例: 123and 456) に対して、次の情報を取得することです。

A1B1C1 C5H5J8F3
A1B1C1 D3K21F9
A1B1C1 F1N5NA3
2X3P4T5O C5H5J8F
2X3P4T5O D3K21F9
2X3P4T5O F1N5NA3

つまり、123 キーのすべての値と 456 キーのすべての値を組み合わせます。値が 1 つしかないキーもあれば、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

そして、範囲(len())のさまざまな組み合わせでwhileループ、forループを使用しようとしましたが、私が望んでいたことができませんでした。私はそれがそのようになると確信していますが、私はプログラミングに慣れていないので、正しく理解できないようです. 何かご意見は?

4

2 に答える 2

1

ネストされた 2 つの 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 に答える