如何编写递归函数提取嵌套字典中的全部products字段数据
问题原因排查
- 直接报错原因:遍历到
sub_categories键时,你把键名字符串k(值为"sub_categories")传给了递归调用的get_product函数,函数预期接收字典参数,尝试调用.items()遍历字符串时,会直接抛出AttributeError: 'str' object has no attribute 'items'属性错误。 - 逻辑错误1:遇到
sub_categories就直接return,不会收集当前层级的products字段内容,也不会处理所有子分类,只能返回第一个匹配到的内容,无法收集全量产品。 - 逻辑错误2:
sub_categories是存储子分类字典的列表,需要遍历列表内的每一个子分类字典分别递归处理,不能直接把键名或者整个列表传给递归函数。
修正方案
实现思路是每次处理一个分类时,先收集当前分类的所有产品,再遍历所有子分类递归获取子分类下的所有产品,合并后返回:
def get_all_products(category): # 初始化结果存储列表 all_products = [] # 优先收集当前分类下的产品 all_products.extend(category.get('products', [])) # 遍历所有子分类,递归获取子分类的产品合并到结果 for sub_category in category.get('sub_categories', []): all_products.extend(get_all_products(sub_category)) return all_products # 测试调用 print(get_all_products(category))
运行结果
['Sony xperia 1', 'Samsung Galaxy A32', 'Apple iphone 12', 'Xiaomi redmi 9', 'Dell inspiron 3583-5278', 'HP pavilion dk1056wm', 'Asus ROG strix', 'Microsoft surface book 3', 'Lenovo ideapad 3']
内容的提问来源于stack exchange,提问作者Yasaman Shokri
相关产品推荐
相关产品推荐

