基于含重复键的列表创建字典:保留重复键的最小对应值
用两个列表创建字典并保留重复键的最小对应值
问题描述
现有两个列表:[1, 2, 2, 3](作为键)和[3, 4, 5, 6](作为对应值),需要创建一个字典,当键重复时,保留该键对应的最小数值,预期输出为:{1: 3, 2: 4, 3: 6}
解决方案1:循环遍历处理(最直观)
直接遍历配对的键值对,逐个判断并更新字典:
keys = [1, 2, 2, 3] values = [3, 4, 5, 6] result_dict = {} for key, val in zip(keys, values): # 如果键不存在,或者当前值比字典中已存的更小,则更新 if key not in result_dict or val < result_dict[key]: result_dict[key] = val print(result_dict)
运行后输出:{1: 3, 2: 4, 3: 6}
解决方案2:结合分组与最小值计算
利用itertools.groupby先按键分组,再取每组的最小值,需要先对键值对按键排序(groupby仅对连续相同元素分组):
from itertools import groupby from operator import itemgetter keys = [1, 2, 2, 3] values = [3, 4, 5, 6] # 先将键值对按键排序,确保相同键连续 sorted_pairs = sorted(zip(keys, values), key=itemgetter(0)) # 按键分组,每组取值的最小值 result_dict = {k: min(v for _, v in group) for k, group in groupby(sorted_pairs, key=itemgetter(0))} print(result_dict)
运行后输出同样符合预期。
内容的提问来源于stack exchange,提问作者mn n
相关产品推荐
相关产品推荐

