python试图访问嵌套的dict元素

2024-09-29 03:36:42 发布

您现在位置:Python中文网/ 问答频道 /正文


{"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'])

Tags: frankhttpsimagecomidtitleproductdict
3条回答

给定字典d

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}

您可以将所有数据卸载到单个数据帧中:

df = pd.DataFrame.from_dict(d)
df = pd.concat([df.drop(columns = ['**products**']), df['**products**'].apply(pd.Series)], axis = 1)

输出数据帧结构df.dtypes

type                object
offset               int64
number               int64
totalProducts        int64
processingTimeMs     int64
expires              int64
id                   int64
title               object
image               object
imageType           object
dtype: object

现在只需选择相关列

要仅提取产品数据,请使用专用方法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

上述解决方案非常快

如果您的数据如下所示:

data = [
    {
        "type": "product",
        "products": [
            {
                "id": 466501,
                "title": "Nicholas Cole Cellars GraEagle Red Wing",
                "image": "https://spoonacular.com/productImages/466501-312x231.jpg","imageType":"jpg"
            }
            # ...
        ]
    }

    # ...
]

要获取第一个项目的第一个产品id,请执行以下操作:

print(data[0]["products"][0]["id"])

相关问题 更多 >