2016-12-01 38 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 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

那麼,如何訪問每個項目不同的列表中的for循環。任何想法? – everestial007

+0

你必須使用嵌套循環,我想 - 秒,我會更新我的答案。 – nlsdfnbch

+0

看看這是你在找什麼。 – nlsdfnbch

相關問題