You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找值为列表的字典中最小起始值的Pythonic实现

更Pythonic的方式找出字典列表项分割后的最小起始数字

嘿,你的原脚本逻辑完全没问题,能准确得到你想要的结果!不过咱们可以用更贴合Python风格的写法来简化代码,让它更简洁优雅,还能在处理大数据时更高效~

方案一:用生成器表达式直接求最小值(推荐)

这个方法不需要先把所有起始数字存到列表里,而是一边迭代一边生成数值,直接传给min()函数,内存占用更低,代码也更紧凑:

c = {'Apple': ['210-219', '246-255'], 'Orange': ['159-161', '202-204', '207-209', '209-211', '220-222', '238-240', '245-247', '261-263']}

lowest_start = min(int(item.split('-')[0]) for values in c.values() for item in values)
print('The lowest:', lowest_start)

方案二:列表推导式(如果需要保留所有起始数字)

如果你还需要保留所有分割后的起始数字列表,同时简化原有的循环写法,可以用列表推导式替代嵌套循环:

c = {'Apple': ['210-219', '246-255'], 'Orange': ['159-161', '202-204', '207-209', '209-211', '220-222', '238-240', '245-247', '261-263']}

all_starts = [int(item.split('-')[0]) for values in c.values() for item in values]
print(all_starts)
print('The lowest:', min(all_starts))

为什么这两种写法更Pythonic?

  • 去掉了冗余的临时变量和多层循环的缩进,代码更易读也更紧凑
  • 生成器表达式避免了创建不必要的中间列表,处理大量数据时内存效率更高
  • 充分利用了Python的内置函数和推导式特性,符合Python“简洁、优雅”的设计哲学

原脚本里的print(i.split('-')[0])如果只是调试用的话,优化后的代码里可以去掉;如果需要打印所有起始数字,方案二的all_starts列表可以直接遍历打印哦~

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:38:10