Python遍历JSON文件的更优实现,能否用itertools.product替代嵌套循环?
首先明确结论:itertools.product 不适用于当前场景,这个工具是用来生成多个可迭代对象的笛卡尔积的,和你「逐层展开嵌套序列」的需求不匹配。
更Pythonic的实现方式
1. 生成器表达式拉平(最常用、可读性最高)
直接把三层嵌套逻辑写成单行生成器,按需迭代不占用额外内存:
# 注意不要把变量命名为dir,dir是Python内置函数名,会覆盖原有功能 models = (model for car in data['cars'] for brand in car for model in car[brand]) # 打印或者后续处理直接遍历即可 for model in models: print(model)
如果需要直接拿到所有结果的列表,把生成器外层的()换成[]即可。
2. 利用itertools.chain.from_iterable 逐层拉平
如果嵌套层级更多,用这个工具可以避免写过长的生成器表达式,逻辑更清晰:
import itertools # 第一层:取出所有品牌对应的车型列表 brand_model_lists = itertools.chain.from_iterable(car.values() for car in data['cars']) # 第二层:拉平所有车型列表得到最终结果 models = itertools.chain.from_iterable(brand_model_lists) # 遍历使用 for model in models: print(model)
3. 简化版(适配你当前的JSON结构)
观察你的JSON结构可以发现,cars数组下的每个字典都只有唯一的品牌键,不需要遍历字典的所有键,可以直接取唯一值减少一层循环:
models = (model for car in data['cars'] for model in next(iter(car.values())))
内容的提问来源于stack exchange,提问作者Jázon Pánczél
相关产品推荐
相关产品推荐

