
高效合并列表中相同键值字典
本文介绍如何高效合并Python列表中具有相同键的字典,特别是针对合并端口信息的情况。
问题描述:
给定一个包含多个字典的列表,每个字典都包含一个“sw”键和一个“port”键。目标是将具有相同“sw”值的字典合并,并将它们的“port”值合并成一个列表。
示例:
立即学习“Python免费学习笔记(深入)”;
假设输入列表如下:
input_list = [{'sw': '44', 'port': 1}, {'sw': '45', 'port': 21}, {'sw': '44', 'port': 2}, {'sw': '45', 'port': 22}, {'sw': '46', 'port': 2}]
期望的输出结果为:
output_list = [{'sw': '44', 'port': [1, 2]}, {'sw': '45', 'port': [21, 22]}, {'sw': '46', 'port': [2]}]
解决方案:
以下代码提供了一种高效的解决方案:
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]}]
该函数首先创建一个空字典merged_dict用于存储合并后的结果。然后,它遍历输入列表,将每个字典的“sw”值作为键,将“port”值添加到对应的列表中。最后,它将merged_dict转换成期望的列表格式并返回。
扩展:支持任意键合并
上述方法可以扩展到支持根据任意键进行合并:
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)
这个通用函数接受一个额外的参数key,指定用于合并字典的键。 它将所有其他键值对都保留在合并后的字典中。
这些方法提供了一种清晰、高效的方式来合并列表中具有相同键的字典,并能轻松扩展到更通用的场景。
以上就是Python列表字典合并:如何高效合并列表中相同键值字典的端口信息?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1356867.html
微信扫一扫
支付宝扫一扫