如何将字典与键值合并但包含多个不同的列表值?

时间:2016-12-01 18:35:38

标签: list python-3.x dictionary for-loop merge

有人问我的输入是怎样的: 输入是前一个函数的输出。 当我做的时候

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]

能够逐行打印或将其写入文件     print(h1_string)     print(h1_p1_sum)

我从defaultdict和其他dict中读过几个例子,但是我无法围绕这个过程。我已经能够做简单的操作,但这样的事情看起来有点复杂。我真的很感激您可以在流程的每个步骤中添加任何解释。

提前谢谢!

1 个答案:

答案 0 :(得分: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