如何将两个子网列表合并为字典,相同键对应值组成列表?
合并子网列表为归集字典的实现方法
需求:将两个列表agg(作为字典的键)和subnet(作为对应键的值)合并为一个字典,相同键对应的子网值会被归集到同一个列表中。
示例数据
agg = [ '10.109.0.0/16', '10.109.0.0/16', '10.109.0.0/16', '9.16.0.0/16', '9.16.0.0/16', '9.16.0.0/16' ] subnet = [ '10.109.0.0/19', '10.109.32.0/19', '10.109.64.0/19', '9.16.17.0/24', '9.16.18.0/24', '9.16.19.0/24' ] # 预期结果(注:示例中'10.109.32.0'应为'10.109.32.0/19',属于笔误) result = { '10.109.0.0/16':['10.109.0.0/19','10.109.32.0/19','10.109.64.0/19'], '9.16.0.0/16' : ['9.16.17.0/24','9.16.18.0/24','9.16.19.0/24'] }
解决方案
方法1:基础字典循环
利用字典的setdefault方法,自动处理键不存在的情况,直接追加对应子网值:
result = {} for key, value in zip(agg, subnet): result.setdefault(key, []).append(value) print(result)
方法2:使用collections.defaultdict
通过defaultdict预先指定默认值为列表,代码更简洁:
from collections import defaultdict result = defaultdict(list) for key, value in zip(agg, subnet): result[key].append(value) # 若需要转为普通字典,可执行:result = dict(result) print(result)
两种方法都能得到预期的归集结果,defaultdict写法更简洁,适合处理这类需要默认容器的场景。
内容的提问来源于stack exchange,提问作者ver_roh
相关产品推荐
相关产品推荐

