Python通过键值对列表生成字典时保留重复键对应最大值
重复键生成字典保留最大值的实现方法
你可以通过以下几种方式实现需求,按适用场景排序:
1. 基础循环实现(推荐,无额外依赖)
直接遍历键值对,逐次判断更新字典,时间复杂度O(n),效率最高:
L1 = ['a','b','b','d'] L2 = [1,3,2,4] d = {} for k, v in zip(L1, L2): # 键不存在 或 当前值大于已有值时更新 if k not in d or v > d[k]: d[k] = v print(d) # 输出 {'a': 1, 'b': 3, 'd': 4}
2. defaultdict 缓存所有值后取最大值
如果后续还需要使用同一键的所有取值,可以用这种方法:
from collections import defaultdict L1 = ['a','b','b','d'] L2 = [1,3,2,4] temp_dict = defaultdict(list) for k, v in zip(L1, L2): temp_dict[k].append(v) # 遍历临时字典取每个值列表的最大值 d = {k: max(val_list) for k, val_list in temp_dict.items()} print(d) # 输出 {'a': 1, 'b': 3, 'd': 4}
3. groupby 函数式实现
适合偏好函数式写法的场景,因为需要先排序,时间复杂度O(nlogn),数据量大时效率低于基础循环:
from itertools import groupby L1 = ['a','b','b','d'] L2 = [1,3,2,4] # 先按键排序,再分组取每组最大值 d = { k: max(v for _, v in group) for k, group in groupby(sorted(zip(L1, L2)), key=lambda x: x[0]) } print(d) # 输出 {'a': 1, 'b': 3, 'd': 4}
内容的提问来源于stack exchange,提问作者Prince Modi
相关产品推荐
相关产品推荐

