寻找值为列表的字典中最小起始值的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
相关产品推荐
相关产品推荐

