1

次のようなペアのエントリ(キー)のリストを含むファイルがあります。

6416    2318
84665   88
90  2339
2624    5371
6118    6774

そして、これらのキーの値を含む別のファイルがあります。

266743  Q8IUM7
64343   H7BXU6
64343   Q9H6S1
64343   C9JB40
23301   Q8NDI1
23301   A8K930

ご覧のとおり、同じキーに複数の値を設定できます。私がやろうとしているのは、最初のk、vペアを自動的に作成して辞書を作成し、次に次のように、すでに辞書にある各エントリにさらに値を追加することです。

"266743: 'Q8IUM7'"プログラムは、を見つけ"64343: 'H7BXU6'"ます。そして、それが見つかると、"64343: 'Q9H6S1'"これを行います"64343: ['H7BXU6', 'Q9H6S1']"

これは私がこれまでに持っているものです:

# Create dictionary
    data = {}

    for line in inmap:
        value = []
        k, v = [x.strip() for x in line.split('\t')]
        data[k] = value.append(v)
        if k in data.viewkeys() == True and v in data.viewvalues() == False:
            data[k] = value.append(v)

しかし、ifステートメントは機能していないようです。それまたはvalue = []forループの内側にあります。何かご意見は?

4

1 に答える 1

3

これは良い考えではありません。キーに複数の値が見つかった場合は、「文字列」から「文字列のリスト」に変更しないで、最初からリストを使用し、進行中にそのリストを展開する必要があります。

このために、あなたは単に使うことができます

from collections import defaultdict
data = defaultdict(list)
for line in inmap:
    k, v = (x.strip() for x in line.split('\t'))
    data[k].append(v)

これが機能するのは、まだ存在していないキーを参照しようとすると、adefaultdictタイプlistがその値として空のリストとともにキーを自動的に作成するためです。それ以外の場合は、通常の辞書と同じように動作します。

結果:

>>> data
defaultdict(<type 'list'>, {'23301': ['Q8NDI1', 'A8K930'], 
'64343': ['H7BXU6', 'Q9H6S1', 'C9JB40'], '266743': ['Q8IUM7']})
于 2012-07-23T10:59:33.103 に答える