2017-07-26 3 views
0

タブ区切りファイル(ヘッダーなし)から2つのpython3辞書を作成します。このファイルには、group_idとgene_idの2つの列があります。グループは複数の遺伝子を有し、遺伝子は複数のグループに属することができる。私は簡単な例で私が欲しいものを示します。1:1以外のタブ区切りファイルからPython辞書を作成する

group_id gene_id 

A  a 
A  b 
A  c 
A  d 
B  a 
B  c 
B  e 

私は2つの辞書がしたい:私のファイルは2.5 GB単位であり、私がするので

dict1 = {'A':(a,b,c,d),'B':(a,c,e)} 

dict2 = {'a':(A,B), 'b':(A), 'c':(A,B), 'd':(A), 'e':(B)} 

を私はスピードのためのタプルの値を保存したいと思います私は後で一緒に作業しなければならない大きな辞書で終わる。

私はこのような質問がたくさんあることは知っていますが、キーと値のペアを持つファイルを処理するときには答えが見つかりません。

ありがとうございます!

+2

確かに。これをまだ実装しようとしましたか?あなたのコードを見て、あなたがどれだけ遠くにいるのか、そしてあなたが抱えている困難を知ることは素晴らしいでしょう。 – idjaw

+0

パンダは始めるのに適しています。 –

+0

タプルの代わりに値をリストにすることはできますか? – wwii

答えて

1

collectionsモジュールは、新しい辞書を返すdefaultdictメソッドを持つタプルは不変であり、あなたがそれらを作成した後に変更することはできませんので、一つのポイントは、あなたがリストを使用すべきですオブジェクトのようなものです。各キーに値を追加するだけで、あなたはかなり完了しています。

from collections import defaultdict 
dict1 = defaultdict(list) 
dict2 = defaultdict(list) 

with open("C:/path/example.txt") as f: 
    header = f.next() 
    for line in f: 
     if line.strip(): 
      a,b = line.strip().split() 
      dict1[a].append(b) 
      dict2[b].append(a) 

print dict1

戻り

defaultdict(<type 'list'>, {'A': ['a', 'b', 'c', 'd'], 'B': ['a', 'c', 'e']}) 

dict2

defaultdict(<type 'list'>, {'a': ['A', 'B'], 'c': ['A', 'B'], 'b': ['A'], 'e': ['B'], 'd': ['A']}) 
+0

それは働いた。ありがとうございました。 – Ani

+0

あなたは私の答え@アニを受け入れますか? –

1

私はコードの種類はここでは言いますが、基本的には文字列を扱っているので、2つの別々のdictを持つことができ、各行を解析することができます。新しい値がある場合は、新しいエントリを作成する必要があります。これはifステートメントで行います。

data = """group_id gene_id 
    A  a 
    A  b 
    A  c 
    A  d 
    B  a 
    B  c 
    B  e""" 

lines = data.splitlines() 
group_dict = {} 
gene_dict = {} 

for line in lines[1:]: 
    group, gene = line.split() 
    if group not in group_dict.keys(): 
     group_dict[group] = list() 
    group_dict[group].append(gene) 

    if gene not in gene_dict.keys(): 
     gene_dict[gene] = list() 
    gene_dict[gene].append(group) 

from pprint import pprint 
pprint(group_dict) 
pprint(gene_dict) 

プリント:

{'A': ['a', 'b', 'c', 'd'], 'B': ['a', 'c', 'e']} 
{'a': ['A', 'B'], 'b': ['A'], 'c': ['A', 'B'], 'd': ['A'], 'e': ['B']} 
関連する問題