Python中比较字典值列表元素,找出全局最小值的键值对
解决字典中找最小值对应键值对的问题
首先得掰扯清楚你原来的代码为啥会输出那些奇怪的数字:你写的min(v[r] + v[r])是把每个字符串元素和自己拼接(比如'10'变成'1010'),然后取这个拼接字符串里单个字符的最小值,比如'1010'里最小的字符是'0',所以才会输出一堆0、5、4这类字符的ASCII最小值,完全偏离了找整个字典里最小数字的需求~
那咱们来写正确的实现,思路很清晰:
- 先把所有字符串形式的数字转成整数,才能正确比较大小(不然字符串
'10'会比'2'小,因为字符'1'的ASCII码比'2'小,这显然不符合数字大小的逻辑) - 遍历字典里的每一个元素,记录下最小的那个数值,以及它对应的键和原始元素
- 最后把结果整理成你想要的字典格式
正确代码示例
b = {'2': ['10', '5', '4'], '4': ['1', '9', '2'], '3': ['90', '87', '77'], '1': ['30']} # 初始化最小数值为无穷大,确保第一个数字能替换它,同时记录对应键和元素 min_num = float('inf') target_key = None target_value = None for key, values in b.items(): for s in values: num = int(s) # 发现更小的数字就更新记录 if num < min_num: min_num = num target_key = key target_value = s # 想要字符串结果就存s,想要整数就存num # 构造符合期望的结果字典 d = {target_key: [int(target_value)]} # 转成整数和你要的{4:[1]}完全匹配 print(d) # 输出: {4: [1]}
代码解释
- 用
float('inf')初始化最小数值,保证第一个遍历到的数字肯定能替换它 - 遍历每个键对应的列表,把每个字符串转成整数后再比较大小,避免字符串按ASCII码比较的坑
- 每次找到更小的数字时,同步更新记录的最小值、对应的键和元素
- 最后把结果整理成
{键: [最小值]}的格式,这里把target_value转成整数,和你期望的输出完全一致
如果想要保留原始字符串形式的结果,只需要把最后一行改成d = {target_key: [target_value]},输出就是{4: ['1']},可以根据需求灵活调整~
内容的提问来源于stack exchange,提问作者user9538877
相关产品推荐
相关产品推荐

