替换基于另外两个词典的词典值列表

2024-04-20 06:19:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用另外两个字典的值替换字典中的值列表。 例如,我有一个名为“a_dict”的字典,每个键的值都作为一个列表

a_dict = {'A1':[10,20,30,40,50,60,70],'B1':[30,50,60,70,80]}

现在我需要用一个新的dict替换匹配“old”的dict中的值,如下所示

old_dict = {0: 10, 1: 30}

new_dict = {0: 100, 1: 300}

所以新的宣言应该是

a_dict_new = {'A1':[100,20,300,40,50,60,70],'B1':[300,50,60,70,80]}

我试图想出下面的代码,但它没有给我正确的解决方案

a_dict = {'A1':[10,20,30,40,50,60,70],'B1':[30,50,60,70,80]}
old_dict = {0: 10, 1: 30}
new_dict = {0: 100, 1: 300}
#a_dict_new = {'A1':[100,20,300,40,50,60,70],'B1':[300,50,60,70,80]}
a_dict_new = {}
for ky1, val1 in old_dict.items():
    for ky2, ls in a_dict.items():
        new_ls=[]
        for v in ls:
            if (v==val1):
                new_ls.append(new_dict[ky1])
            else:
                new_ls.append(v)
        a_dict_new[ky2]=new_ls
#
print(a_dict_new)

OUTPUT 1: {'A1': [10, 20, 300, 40, 50, 60, 70], 'B1': [300, 50, 60, 70, 80]}

在第一个for循环的第一次迭代中,值10在一个新的dict中更改为100,但在第二次迭代中,它覆盖了第一次替换。因此,输出看起来只改变了30到300。你知道吗

有没有人能提出一种有效的方法来执行python3的字典替换操作?你知道吗


Tags: in列表newfor字典a1itemsls
1条回答
网友
1楼 · 发布于 2024-04-20 06:19:04

你的逻辑似乎太复杂了。您只需创建一个映射字典:

mapper = {old_dict[k]: new_dict[k] for k in old_dict.keys() & new_dict.keys()}
# {10: 100, 30: 300}

然后通过字典重新映射值:

a_dict_new = {k: [mapper.get(val, val) for val in v] for k, v in a_dict.items()}
# {'A1': [100, 20, 300, 40, 50, 60, 70], 'B1': [300, 50, 60, 70, 80]}

相关问题 更多 >