首页 > 解决方案 > python试图访问嵌套的dict元素

问题描述


{"type":"product","**products**":[
{"id":466501,"title":"Nicholas Cole    Cellars GraEagle Red    Wing","image":"https://spoonacular.com/productImages/466501-312x231.jpg","imageType":"jpg"},
{"id":455061,"title":"Wieninger    Wiener Gemischter    Satz","image":"https://spoonacular.com/productImages/455061-312x231.jpg","imageType":"jpg"},
{"id":452162,"title":"The    Magnificent Wine Company Steak    House","image":"https://spoonacular.com/productImages/452162-312x231.jpg","imageType":"jpg"},
{"id":464255,"title":"Chateau    Morrisette Black    Dog","image":"https://spoonacular.com/productImages/464255-312x231.jpg","imageType":"jpg"},
{"id":434441,"title":"Dr.    Konstantin Frank    Gewurztraminer","image":"https://spoonacular.com/productImages/434441-312x231.jpg","imageType":"jpg"},
{"id":451567,"title":"Delectus    Dirty Old Dog (    Magnum)","image":"https://spoonacular.com/productImages/451567-312x231.jpg","imageType":"jpg"},
{"id":437451,"title":"Bleasdale    Frank Potts Red    Blend","image":"https://spoonacular.com/productImages/437451-312x231.jpg","imageType":"jpg"},
{"id":451606,"title":"Dr.    Konstantin Frank    Rkatsiteli","image":"https://spoonacular.com/productImages/451606-312x231.jpg","imageType":"jpg"},
{"id":440486,"title":"Dog    House Checker's    Cab","image":"https://spoonacular.com/productImages/440486-312x231.jpg","imageType":"jpg"},
{"id":445496,"title":"Dog    House Charlie's    Chard","image":"https://spoonacular.com/productImages/445496-312x231.jpg","imageType":"jpg"}],
"offset":0,"number":10,"totalProducts":7573,"processingTimeMs":380,"expires":1594279471761}

注意:这是 API 数据!

我正在尝试访问产品列表内容,我该怎么做?

这是我的代码

product = input("enter any food name: ")
   url = 'https://api.spoonacular.com/food/products/search?query={product}&apiKey=7c467a28410940378d56e53829f5efb6&q='
   req = requests.get(url).json()
   data_dict = dict(req)
   for product in data_dict['products']:
       print(product['id'])

标签: pythonapidictionary

解决方案


要仅提取产品数据,请使用专门的方法json_normalize

from pandas.io.json import json_normalize
d = {"type":"product","**products**":[{"id":466501,"title":"Nicholas Cole Cellars GraEagle Red Wing","image":"https://spoonacular.com/productImages/466501-312x231.jpg","imageType":"jpg"},{"id":455061,"title":"Wieninger Wiener Gemischter Satz","image":"https://spoonacular.com/productImages/455061-312x231.jpg","imageType":"jpg"},{"id":452162,"title":"The Magnificent Wine Company Steak House","image":"https://spoonacular.com/productImages/452162-312x231.jpg","imageType":"jpg"},{"id":464255,"title":"Chateau Morrisette Black Dog","image":"https://spoonacular.com/productImages/464255-312x231.jpg","imageType":"jpg"},{"id":434441,"title":"Dr. Konstantin Frank Gewurztraminer","image":"https://spoonacular.com/productImages/434441-312x231.jpg","imageType":"jpg"},{"id":451567,"title":"Delectus Dirty Old Dog ( Magnum)","image":"https://spoonacular.com/productImages/451567-312x231.jpg","imageType":"jpg"},{"id":437451,"title":"Bleasdale Frank Potts Red Blend","image":"https://spoonacular.com/productImages/437451-312x231.jpg","imageType":"jpg"},{"id":451606,"title":"Dr. Konstantin Frank Rkatsiteli","image":"https://spoonacular.com/productImages/451606-312x231.jpg","imageType":"jpg"},{"id":440486,"title":"Dog House Checker's Cab","image":"https://spoonacular.com/productImages/440486-312x231.jpg","imageType":"jpg"},{"id":445496,"title":"Dog House Charlie's Chard","image":"https://spoonacular.com/productImages/445496-312x231.jpg","imageType":"jpg"}],"offset":0,"number":10,"totalProducts":7573,"processingTimeMs":380,"expires":1594279471761}
products = json_normalize(d['**products**'])

结果数据帧结构products.dtypes

id            int64
title        object
image        object
imageType    object
dtype: object

上述解决方案非常快。


推荐阅读