python - 如何用另一个字典值替换字典的值
问题描述
嗨,我有两个列表,其中包含一些带有它们的值的字典
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 所有字典中存在的值
但我没有得到正确的输出
解决方案
从list2
你可以建立一个唯一dict
的保存转换映射,如果你不止一次出现一个键,你有 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}]
推荐阅读
- jquery - 如何修复输出为 [object Object] 的嵌套 json 循环
- azure - Vnet 内的负载平衡 ACI
- vb.net - 如果显示消息,为什么从组合框的文本字段中清除文本?
- python - 如何确定 tkinter 中 ttk.Button 使用的字体?
- javascript - 正则表达式用双换行符分隔段落
- ios - 为什么该网站无法在 Swift URLSession 中转换为 UTF8?
- javascript - 用 js 和 php 改变 div 背景颜色
- arrays - Qsort c中的char数组
- python - 在单元格中插入表格
- firefox - lld-link:错误:无法写入输出文件:权限被拒绝