Python中如何匹配列表内两个字典的相同键以获取对应值
需求可行性与实现说明
首先需要明确一个Python基础规则:原生字典不允许存在重复键,你给出的预期输出示例中单个字典内有两个相同的IP键,这种结构在Python中无法直接实现,重复键的后一个值会直接覆盖前一个值。你可以根据实际业务需要选择以下两种可行的实现方案:
方案1:IP聚合结构(最常用)
将同一IP对应的所有值合并存储,输出结构为单字典,示例输出:{'10.1.1.0': [1, 3], '10.1.1.1': [2, 4]}
实现思路:
- 拆分输入列表得到两个待处理字典
- 取两个字典的键的交集,得到同时存在的IP键
- 遍历所有公共IP,分别从两个字典取出对应的值合并后存入结果
代码示例:
# 输入数据 input_list = [{'10.1.1.0':[1], '10.1.1.1':[2]}, {'10.1.1.0':[3], '10.1.1.1':[4]}] dict_a, dict_b = input_list[0], input_list[1] # 取公共IP键 common_ips = dict_a.keys() & dict_b.keys() # 聚合结果 res = {} for ip in common_ips: res[ip] = dict_a[ip] + dict_b[ip] print(res)
方案2:按IP分组保留原始值
如果需要保留两个原始值的独立存储,调整输出为列表嵌套键值对元组的结构,示例输出:[ [('10.1.1.0', [1]), ('10.1.1.0', [3])], [('10.1.1.1', [2]), ('10.1.1.1', [4])] ]
实现思路:
- 拆分输入列表得到两个待处理字典
- 取两个字典的公共IP键
- 遍历每个公共IP,分别从两个字典取值组装为键值对元组,按IP分组存入结果列表
代码示例:
input_list = [{'10.1.1.0':[1], '10.1.1.1':[2]}, {'10.1.1.0':[3], '10.1.1.1':[4]}] dict_a, dict_b = input_list[0], input_list[1] common_ips = dict_a.keys() & dict_b.keys() res = [] for ip in common_ips: res.append([(ip, dict_a[ip]), (ip, dict_b[ip])]) print(res)
如果确实需要支持重复键的类字典结构,可以使用第三方库multidict的MultiDict类实现,普通业务场景不推荐该方案。
内容的提问来源于stack exchange,提问作者user15365664
相关产品推荐
相关产品推荐

