2016-12-01 10 views
0

誰かが私の入力がどのようになっているか尋ねました: 入力は前の関数の出力です。 私はどのようにキー値と辞書をマージするが、いくつかの異なるリスト値を含む?

print(H1_dict) 

を行う場合は、次の情報が画面に出力される。

defaultdict(<class 'list'>, {2480: ['A', 'C', 'C'], 2651: ['T', 'A', 'G']}) 

データ型を意味する(キー、値)として(クラスリスト)とdefaultdictあります

したがって、このような何か:

私はこの辞書をマージしたい
H1dict = {2480: ['A', 'C', 'C'], 2651: ['T', 'A', 'G'].....} 
H2dict = {2480: ['C', 'T', 'T'], 2651: ['C', 'C', 'A'].....} 

H1_p1_values = {2480: ['0.25', '0.1', '0.083'], 2651: ['0.43', '0.11', '0.23']....} 
H1_p2_values = {2480: ['0.15', '0.15', '0.6'], 2651: ['0.26', '0.083', '0.23']....} 

H2_p1_values = {2480: ['0.3', '0.19', '0.5'], 2651: ['0.43', '0.17', '0.083']....} 

H2_p2_values = {2480: ['0.3', '0.3', '0.1'], 2651: ['0.39', '0.26', '0.21']....} 

:だから

merged_dict (class, list) or (key, values)= {2480: h1['A', 'C', 'C'], h2 ['C', 'T', 'T'], h1_p1['0.25', '0.1', '0.083'], h1_p2['0.15', '0.15', '0.6'], h2_p1['0.3', '0.19', '0.5'], h2_p2['0.3', '0.3', '0.1'], 2651: h1['T', 'A', 'G'], h2['C', 'C', 'A']....} 

は、私がキー値を使用して複数の辞書をマージが異なる辞書が供給される順序を維持したいです。

merged = [haplotype_A, haplotype_B, hapA_freq_My, hapB_freq_My....] 
merged_dict = {} 
for k in haplotype_A.__iter__(): 
    merged_dict[k] = tuple(merged_dict[k] for merged_dict in merged) 

しかし、私は、各リストのインフロントキーの次のレベルを追加したいので、私はときに大きなファイル内の特定のアイテムにアクセスすることができます:私は部分的に使用してそれを行うことができるよ辞書をマージする

必要です。

ダウンストリームforループでキーを使用して、このマージされた辞書内の値にアクセスします。ような何か:

for k, v in merged_dict: 
    h1_p1sum = sum(float(x) for float in v[index] or v[h1_p1]) 
    h1_p1_prod = mul(float(x) for float in v[index] or v[h1_p1]) 
    h1_string = "-".join(str(x) for x in v[h1_index_level] 

と行毎にファイルにそれを印刷したり、書く能力 プリント(h1_string) プリント(h1_p1_sum)

私はdefaultdictや他の辞書からのいくつかの例を読んでいますプロセスの周りに私の頭を包むことはできません。私は簡単な操作を行うことができましたが、このようなものは少し複雑に思えます。私は、あなたがプロセスの各ステップに追加する可能性のある説明を本当に感謝します。

ありがとうございます!

答えて

1

私が正しくあなたを理解していれば、あなたはこれをしたい:

merged = {'h1': haplotype_A, 'h2': haplotype_B, 'h3': hapA_freq_My, ...} 
merged_dict = defaultdict(dict) 
for var_name in merged: 
    for k in merged[var_name]: 
     merged_dict[k][var_name] = merged[var_name][k] 

これはあなたの出力与える必要があります:

もちろん与えられた
>>>merged_dict 
{'2480': {'h1': ['A', 'C', 'C'], 'h2': ['C', 'T', 'T'], ..}, '2651': {...}} 

をあなたの例のデータが与えられたとして、変数は同じです。

あなたは、ネストされたforループを経由してアクセスすることができます:私は、forループの各項目別のリストにアクセスしないか、だから、

for k in merged_dict: 
    for sub_key in merged_dict[k]: 
     print(merged_dict[k][sub_key]) # print entire list 
     for item in merged[k][sub_key]: 
      print(item) # prints item in list 
+0

。何か案が? – everestial007

+0

あなたは入れ子にされたループを使用する必要があります、私は仮定します - 秒、私は私の答えを更新します。 – nlsdfnbch

+0

これがあなたが探しているものかどうかを確認してください。 – nlsdfnbch

関連する問題