python-3.x 通过合并两个保留键值对的字典来创建新dict

piwo6bdm  于 2023-02-06  发布在  Python
关注(0)|答案(2)|浏览(119)

我正尝试用两个字典中更新的键和值创建一个新字典。
我有两本字典:

r = {'seq1': 'cgatcgatacgatgcgatgctagatcgagtgcatcgcggcgccgcgcgcgcatgcagcagctacgatgcattaatccgatcgatcgagtacgatata', 'seq2':'cgatcgatacgatgcgatgctagatcgagtgcatcgcggcgccgcgcgcgcatgcagcagctacgatgcattaatccgatcgatcgagt', 'seq3':'cgatcgatacgatgcgatgctagatcgagtgcatcgcggcgccgcgcgcgcatgcagcagctacgatgcattaatccgatcgatcgagtacgatatataatatacgatcagctagcc'}

pr = {'seq1': [(124, 22), (114, 22)],
 'seq2': [(100, 22)],
 'seq3': [(124, 22)]}

这是我的当前代码:

for key, val in r.items():
    for val2 in pr.values():
        print({'name': key, 'size': len(val), 'p_list' : val2})

输出如下:

{'name': 'seq1', 'size': 163, 'p_list': [(124, 22), (114, 22)]}
{'name': 'seq1', 'size': 163, 'p_list': [(100, 22)]}
{'name': 'seq1', 'size': 163, 'p_list': [(124, 22)]}
{'name': 'seq2', 'size': 163, 'p_list': [(124, 22), (114, 22)]}
{'name': 'seq2', 'size': 163, 'p_list': [(100, 22)]}
{'name': 'seq2', 'size': 163, 'p_list': [(124, 22)]}
{'name': 'seq3', 'size': 215, 'p_list': [(124, 22), (114, 22)]}
{'name': 'seq3', 'size': 215, 'p_list': [(100, 22)]}
{'name': 'seq3', 'size': 215, 'p_list': [(124, 22)]}

我希望输出如下所示:

{'name': 'seq1', 'size': 163, 'p_list': [(124, 22), (114, 22)]}
{'name': 'seq2', 'size': 163, 'p_list': [(100, 22)]}
{'name': 'seq3', 'size': 163, 'p_list': [(124, 22)]}

我认为这个问题是由于我的嵌套for循环,但无论如何排列,我似乎都不能让它工作。我也尝试过使用.update()方法,但它对我也不起作用。任何建议都很感激!

oknwwptz

oknwwptz1#

您可以使用带有zip的列表解析来对相应的元素进行分组。

res = [{'name': key, 'size': len(val), 'p_list': val2} for (key, val), val2 
           in zip(r.items(), pr.values())]

如果两个指令之间的密钥相同,那么您只需要循环一个指令的项目。

res = [{'name': key, 'size': len(val), 'p_list': pr[key]} for key, val in r.items()]
insrf1ej

insrf1ej2#

如果您知道两个字典的键总是相同的,那么您只需遍历其中一个字典,然后使用键访问第二个字典的值。

for key, val in r.items():
    print({'name': key, 'size': len(val), 'p_list' : pr[key]})

相关问题