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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:11