
本文介绍如何高效合并Python列表中具有相同键的字典,特别是针对合并端口信息的情况。
问题描述:
给定一个包含多个字典的列表,每个字典都包含一个“sw”键和一个“port”键。目标是将具有相同“sw”值的字典合并,并将它们的“port”值合并成一个列表。
示例:
立即学习“Python免费学习笔记(深入)”;
假设输入列表如下:
<code class="python">input_list = [{'sw': '44', 'port': 1}, {'sw': '45', 'port': 21}, {'sw': '44', 'port': 2}, {'sw': '45', 'port': 22}, {'sw': '46', 'port': 2}]</code>期望的输出结果为:
<code class="python">output_list = [{'sw': '44', 'port': [1, 2]}, {'sw': '45', 'port': [21, 22]}, {'sw': '46', 'port': [2]}]</code>解决方案:
以下代码提供了一种高效的解决方案:
<code class="python">def merge_dicts(input_list):
merged_dict = {}
for item in input_list:
sw = item['sw']
port = item['port']
if sw not in merged_dict:
merged_dict[sw] = []
merged_dict[sw].append(port)
return [{'sw': sw, 'port': ports} for sw, ports in merged_dict.items()]
input_list = [{'sw': '44', 'port': 1}, {'sw': '45', 'port': 21}, {'sw': '44', 'port': 2}, {'sw': '45', 'port': 22}, {'sw': '46', 'port': 2}]
output_list = merge_dicts(input_list)
print(output_list) # Output: [{'sw': '44', 'port': [1, 2]}, {'sw': '45', 'port': [21, 22]}, {'sw': '46', 'port': [2]}]</code>该函数首先创建一个空字典merged_dict用于存储合并后的结果。然后,它遍历输入列表,将每个字典的“sw”值作为键,将“port”值添加到对应的列表中。最后,它将merged_dict转换成期望的列表格式并返回。
扩展:支持任意键合并
上述方法可以扩展到支持根据任意键进行合并:
<code class="python">def merge_dicts_general(input_list, key):
merged_dict = {}
for item in input_list:
k = item[key]
if k not in merged_dict:
merged_dict[k] = []
merged_dict[k].append(item)
return list(merged_dict.values())
input_list = [{'sw': '44', 'port': 1, 'vlan':10}, {'sw': '45', 'port': 21, 'vlan':20}, {'sw': '44', 'port': 2, 'vlan':10}]
output_list = merge_dicts_general(input_list, 'sw')
print(output_list)</code>这个通用函数接受一个额外的参数key,指定用于合并字典的键。 它将所有其他键值对都保留在合并后的字典中。
这些方法提供了一种清晰、高效的方式来合并列表中具有相同键的字典,并能轻松扩展到更通用的场景。
以上就是Python列表字典合并:如何高效合并列表中相同键值字典的端口信息?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号