我想使用另外两个字典的值替换字典中的值列表。 例如,我有一本名为“ a_dict”的字典,其每个键的值都作为列表
a_dict = {'A1':[10,20,30,40,50,60,70],'B1':[30,50,60,70,80]}
现在,我需要使用new_dict替换a_dict中与“ old_dict”匹配的值,如下所示,
old_dict = {0: 10, 1: 30}
new_dict = {0: 100, 1: 300}
这样新的a_dict应该是
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循环的第一次迭代中,在a_dict_new中将值10更改为100,但是在第二次迭代中,它将覆盖第一个替换。因此,输出看起来只更改了30到300。
有人能建议一种有效的方法来执行此字典替换操作python 3吗?
答案 0 :(得分:1)
您的逻辑似乎过于复杂。您可以只创建一个映射字典:
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]}