首页 > 解决方案 > 如何用另一个字典值替换字典的值

问题描述

嗨,我有两个列表,其中包含一些带有它们的值的字典

list1 = [{'val-1': 0, 'val-2': 0, 'val-3': 0}, {'val-1': 0, 'val-2': 0, 'val-3': 0}, {'val-4': 0, 
'val-5': 0, 'val-6': 0}]

list2 = [{'val-1': 90, 'val-4': 89, 'val-3': 99}, {'val-2': 88, 'val-6': 55, 'val-1':100}]

所需的输出将是这样的

output: [{'val-1': 90, 'val-2': 88, 'val-3': 99}, {'val-1': 90, 'val-2': 88, 'val-3': 99}, {'val-4': 
89,'val-5': 0, 'val-6': 55}]

我怎么能做这个替换?

我在 list2 中所做的我选择每个字典并比较和替换 list1 所有字典中存在的值

但我没有得到正确的输出

标签: pythonlistdictionarytuples

解决方案


list2你可以建立一个唯一dict的保存转换映射,如果你不止一次出现一个键,你有 2 个选择

  1. 保持第一次出现,不要覆盖
  2. 保持最后,每次覆盖

对于keepfirst

list2 = [{'val-1': 90, 'val-4': 89, 'val-3': 99}, {'val-2': 88, 'val-6': 55, 'val-1': 100}]

# 1. Keep first (in fact overwrite but do backward)
update_dict = {k: v for d in list2[::-1] for k, v in d.items()}
# 2. Keep last
update_dict = {k: v for d in list2 for k, v in d.items()}

然后使用 list 和 dict 理解重建原始list1结构,使用update_dict

result = [{k: update_dict.get(k, v) for k, v in subdict.items()}
          for subdict in list1]
print(result)

1. keep first

[{'val-1': 90, 'val-2': 88, 'val-3': 99}, {'val-1': 90, 'val-2': 88, 'val-3': 99}, {'val-4': 89, 'val-5': 0, 'val-6': 55}]

随着2. keep last(变化val-1

[{'val-1': 100, 'val-2': 88, 'val-3': 99}, {'val-1': 100, 'val-2': 88, 'val-3': 99}, {'val-4': 89, 'val-5': 0, 'val-6': 55}]

推荐阅读