首页手机python中两个字典如何合并为一个 python两个字典相同键值合并

python中两个字典如何合并为一个 python两个字典相同键值合并

圆圆2025-07-02 22:00:35次浏览条评论

python数据整合:基于键值匹配高效合并字典列表本教程详细阐述了如何在Python中高效重构多个字典列表进行合并与数据补充。通过匹配特定键的值,我们可以将来自不同源列表(如listA和listB)的额外信息(如original_name和original_address)整合到主数据列表(dataList)的每个字典关系中,从而构建一个包含所有后续字段的全新字典列表。代码示例和最佳实践,帮助读者掌握此类数据整合技巧。

在数据处理过程中,我们经常会遇到需要从多个数据源整合信息来构建一个更完整的数据集的场景。例如,你可能有一个包含核心记录的列表,以及包含其他补充描述属性的辅助列表。目标是根据共同的标识符(如或地址)将这些补充属性添加到核心记录中。场景与挑战

假设我们有以下三个字典列表:listA:包含name和original_name,用于提供原始名称信息。listB:包含address和original_address,用于提供原始地址信息。dataList:主数据列表,包含id,created_at,name,

我们的任务是创建一个新的列表finalList,它基于dataList,但同时从listA中匹配name字段,并添加original_name;从listB中匹配address字段,并添加original_address。

数据原始样本如下:

立即学习“Python免费学习笔记(研究)”;listA = [ { quot;namequot;: quot;姓名样本1quot;, quot;original_namequot; : quot;原名样本1quot;, }, { quot;namequot;: quot;姓名样本2quot;, quot;original_namequot; : quot;原名样本2quot;, }]listB = [ { quot;addressquot;: quot;地址样本1quot;, quot;original_addressquot;: quot;原始地址样本1quot;, }, { quot;addressquot;: quot;地址样本2quot;, quot;original_addressquot; : quot;原始地址样本2quot;, }]dataList = [ { quot;idquot;: ”;1”;, quot;created_atquot;: quot;日期 1quot;, quot;namequot;: quot;名称示例 1quot;, quot;addressquot;: quot;地址示例 1quot;, }, { quot;idquot;: quot;2quot;, quot;created_atquot;: quot;日期 2quot;, quot;namequot;: quot;名称示例 2quot;, quot;addressquot;: quot;地址示例 2quot;, }]登录后复制

期望的 finalList 结构应为:finalList = [ { quot;idquot;: quot;1quot;, quot;created_atquot;: quot;日期 1quot;, quot;namequot;: quot;名称示例 1quot;, quot;original_namequot; : quot;原始名称示例 1quot;, quot;addressquot;: quot;地址示例 1quot;, quot;original_addressquot; : quot;原始地址示例 1quot;, }, { quot;idquot;: quot;2quot;, quot;created_atquot;: quot;日期 2quot;, quot;namequot;: quot;名称示例 2quot;, quot;original_namequot

; : quot;原名称样本2quot;, quot;地址quot;: quot;地址样本2quot;, quot;original_addressquot;: quot;原始地址样本2quot;, }]登录后复制解决方案:基于修补循环的匹配与更新

一种修复且有效的方法是利用Python的循环结构,恢复辅助列表,并在主列表中查找匹配项进行更新。 dataList,我们首先创建一个它的深拷贝。核心思路复制主列表:使用copy模块的deepcopy函数创建dataList的独立副本,作为我们最终操作的finalList。合并辅助列表:将listA和listB合并成一个迭代器(通过listA listB),这样就可以最终处理所有补充数据。然后并匹配更新:对于合并后的每个辅助字典相关(条目):判断条目中的是名称和地址,包含其来源。根据判断结果,完成finalList中的每个字典(data)。如果data中对应的匹配键值与entry 中的键值匹配,则将entry中对应的original_字段添加到data中。

示例代码 from copy import deepcopy# 原始数据定义(与上述场景描述一致)listA = [ {“name”: “name sample 1”, “original_name”: “original name sample 1”}, {“name”: “name sample 2”, “original_name”: “original name sample 2”}]listB = [ {“address”: “address sample 1”, “original_address”: “original address sample 1”}, {“address”: “address sample 2”, “original_address”: “original address sample 2”}]dataList = [ {“id”: “1”, “created_at”: “date 1”, “name”: quot;名称样本1quot;, quot;地址quot;: quot;地址样本1quot;}, {quot;idquot;: quot;2quot;, quot;created_atquot;: quot;日期2quot;, quot;namequot;: quot;名称样本2quot;, quot;地址quot;: quot;地址样本2quot;}]# 1.dataList的深拷贝,避免修改原始数据finalList = deepcopy(dataList)# 2.遍历listA和listB的合并结果#这种方式解决了两种不同类型的补充数据统一处理 for listA listB中的entry: # 3.根据entry中存在的键(name或address)进行判断 if quot;namequot; inentry: #则是来自listA的边界,匹配name并为finalList中的数据添加original_name: if data['name'] ==entry['name']:数据['原始名称'] = 条目['原始名称'] elif quot;addressquot; in entry: # 如果是来自listB的边境,则匹配address并为finalList中的数据添加original_address: if data['address'] == entry['address']:

data['original_address'] = entry['original_address']# 打印结果,验证原始修改dataList保持修改,且finalList已包含所需信息print(quot;原始dataList (未修改):quot;)print(dataList)print(quot;\n合并后的finalList:quot;)print(finalList)登录复制后运行结果原始dataList (未):[{'id': '1', 'created_at': 'date 1', 'name': '名称样本1', 'address': '地址样本1'}, {'id': '2', 'created_at': '日期2', 'name': '名称样本2', '地址': '地址样本2'}]合并后的finalList:[{'id': '1', 'created_at': '日期1', 'name':'名称样本1', 'address': '地址样本1', 'original_name': '原始名称样本1', 'original_address': '原始地址样本1'}, {'id': '2', 'created_at': '日期2', 'name': '名称样本2', 'address': '地址样本2', 'original_name': '原名样本2','original_address':'原地址样本2'}]登录后复制事项注意与性能优化

上述方法对于小规模数据是有效且容易理解的。然而,当列表规模非常大时,打破循环的性能会成为瓶颈。其时间复杂度为O(M * N),其中M是listA listB的总长度,N 是finalList对于大型数据集,可以考虑以下优化策略:1. 的长度。 使用字典进行重建(哈希映射)

将辅助列表转换为字典(哈希映射),以实现O(1)最终的平均查找时间。这将把整体时间复杂度降低到O(M N),因为重建和遍历

文章以上就是Python数据整合:基于键值匹配合并字典列表的详细内容,更多请关注乐哥科学网其他相关!

Python数据整合
java变量初始化是否是原子性的 java变量初始化规则
相关内容
发表评论

游客 回复需填写必要信息