如何按Filename匹配将list_b的Speed字段合并到list_a字典列表
实现两个字典列表按Filename匹配追加Speed字段
需求说明
- 输入为两个存储字典的列表
list_a、list_b - 匹配规则:仅当两个列表中字典的
Filename字段值完全一致时,将list_b对应字典的Speed字段追加到list_a的匹配字典中 - 输出要求:处理后的
list_a中每个字典需包含4个键值对
示例输入
list_a 原始数据
from pandas import Timestamp list_a =[{'Filename': '20211004T102400622.jpg', 'convertedDate': Timestamp('2021-10-04 10:24:00'), 'path_name': '/content/drive/My Drive/train later/Continuous Running Time/Front Camera/20211004T102400622.jpg'}, {'Filename': '20211004T102403688.jpg', 'convertedDate': Timestamp('2021-10-04 10:24:03'), 'path_name': '/content/drive/My Drive/train later/Continuous Running Time/Front Camera/20211004T102403688.jpg'}, {'Filename': '20211004T102403684.jpg', 'convertedDate': Timestamp('2021-10-04 10:24:03'), 'path_name': '/content/drive/My Drive/train later/Continuous Running Time/Front Camera/20211004T102403684.jpg'}, {'Filename': '20211004T102406737.jpg', 'convertedDate': Timestamp('2021-10-04 10:24:06'), 'path_name': '/content/drive/My Drive/train later/Continuous Running Time/Front Camera/20211004T102406737.jpg'}, {'Filename': '20211004T102409773.jpg', 'convertedDate': Timestamp('2021-10-04 10:24:09'), 'path_name': '/content/drive/My Drive/train later/Continuous Running Time/Front Camera/20211004T102409773.jpg'}]
list_b 原始数据
list_b = [{'Filename': '20211004T102400622.jpg', 'Speed': '0.3', 'Time': '2021-10-04T10:24:00.622Z'}, {'Filename': '20211004T102403684.jpg', 'Speed': '0.2', 'Time': '2021-10-04T10:24:03.684Z'}, {'Filename': '20211004T102403688.jpg', 'Speed': '0.2', 'Time': '2021-10-04T10:24:03.688Z'}, {'Filename': '20211004T102406737.jpg', 'Speed': '0.0', 'Time': '2021-10-04T10:24:06.737Z'}, {'Filename': '20211004T102409773.jpg', 'Speed': '0.1', 'Time': '2021-10-04T10:24:09.773Z'}]
实现代码
推荐先将list_b转为Filename映射Speed的字典,避免嵌套循环带来的性能损耗,查找匹配项的时间复杂度为O(1),整体处理效率更高。
方式1:直接修改原list_a
# 构建Filename到Speed的映射 speed_mapping = {b_item['Filename']: b_item['Speed'] for b_item in list_b} # 遍历list_a追加匹配到的Speed字段 for a_item in list_a: file_name = a_item['Filename'] if file_name in speed_mapping: a_item['Speed'] = speed_mapping[file_name]
方式2:不修改原数据,生成新列表
如果需要保留原始list_a不变,可以用拷贝的方式生成新列表:
speed_mapping = {b_item['Filename']: b_item['Speed'] for b_item in list_b} new_list_a = [] for a_item in list_a: processed_item = a_item.copy() file_name = processed_item['Filename'] if file_name in speed_mapping: processed_item['Speed'] = speed_mapping[file_name] new_list_a.append(processed_item)
处理结果
针对给出的示例数据,所有条目的Filename都能完全匹配,处理后每个字典都会包含Filename、convertedDate、path_name、Speed4个键,符合需求。如果存在list_a里的文件名在list_b中找不到对应项的情况,对应条目不会添加Speed字段,如果需要给这类条目填充默认值,可以在判断分支加else逻辑赋值即可。
内容的提问来源于stack exchange,提问作者sheetal dsouza
相关产品推荐
相关产品推荐

