带字符串整型字段的字典值的python排序列表

2024-06-17 15:23:07 发布

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

错误:

TypeError at /api/product/
string indices must be integers

代码:

data = [
        {
        "link": "https://www.kohls.com/product/prd-3751773/laura-geller-iconic-baked-sculpting-lipstick.jsp?skuid=75792684",
        "price": "21"
        },
        {
        "link": "https://www.skinstore.com/laura-geller-iconic-baked-sculpting-lipstick-chocolate-rasberry/11638314.html?switchcurrency=USD&shippingcountry=US",
        "price": "21.0"
        },
        {
        "link": "https://shop.nordstrom.com/S/4125441?utm_source=rakuten&utm_medium=affiliate&utm_campaign=datafeed&utm_content=Women:Makeup:Lip&utm_term=5000548&utm_channel=affiliate_ret_p&sp_source=rakuten&sp_campaign=datafeed",
        "price": 21
        },
        {
        "link": "https://www.macys.com/shop/product/laura-geller-beauty-iconic-baked-sculpting-lipstick-cream?ID=5713197&PartnerID=LINKSHARE&cm_mmc=LINKSHARE-_-4-_-41-_-MP441",
        "price": "21.00",
        "stock": true
        },
        {
        "link": "https://www.walmart.com/ip/Laura-Geller-Iconic-Baked-Sculpting-Lipstick-Chocolate-Raspberry-0-13-oz-3-8-g/597167699",
        "price": "12.88"
        }
]

data = sorted(data, key = lambda i: (float(i['price']))) 

在这里,我试图按价格对数据进行排序。但是,由于字符串数据,我得到了错误。 请看看我如何解决这个问题


Tags: httpscomdatawww错误linkproductbaked
1条回答
网友
1楼 · 发布于 2024-06-17 15:23:07

问题

如评论中所述(即汉普斯·拉森),您的数据必须是JSON字符串。这就解释了你得到的错误。此外,这也解释了为什么数据中的值为true

您可以执行以下操作

代码

import json

# Data is a string
data = '''[
        {
        "link": "https://www.kohls.com/product/prd-3751773/laura-geller-iconic-baked-sculpting-lipstick.jsp?skuid=75792684",
        "price": "21"
        },
        {
        "link": "https://www.skinstore.com/laura-geller-iconic-baked-sculpting-lipstick-chocolate-rasberry/11638314.html?switchcurrency=USD&shippingcountry=US",
        "price": "21.0"
        },
        {
        "link": "https://shop.nordstrom.com/S/4125441?utm_source=rakuten&utm_medium=affiliate&utm_campaign=datafeed&utm_content=Women:Makeup:Lip&utm_term=5000548&utm_channel=affiliate_ret_p&sp_source=rakuten&sp_campaign=datafeed",
        "price": 21
        },
        {
        "link": "https://www.macys.com/shop/product/laura-geller-beauty-iconic-baked-sculpting-lipstick-cream?ID=5713197&PartnerID=LINKSHARE&cm_mmc=LINKSHARE-_-4-_-41-_-MP441",
        "price": "21.00",
        "stock": true
        },
        {
        "link": "https://www.walmart.com/ip/Laura-Geller-Iconic-Baked-Sculpting-Lipstick-Chocolate-Raspberry-0-13-oz-3-8-g/597167699",
        "price": "12.88"
        }
]'''

# Convert to Python object
data = json.loads(data)  # this also converts true to True while decoding

# now your sort code works
data = sorted(data, key = lambda i: (float(i['price']))) 

# Show results (same as original since already sorted)
from pprint import pprint as pp
pp(data)

输出

[{'link': 'https://www.walmart.com/ip/Laura-Geller-Iconic-Baked-Sculpting-Lipstick-Chocolate-Raspberry-0-13-oz-3-8-g/597167699',
  'price': '12.88'},
 {'link': 'https://www.kohls.com/product/prd-3751773/laura-geller-iconic-baked-sculpting-lipstick.jsp?skuid=75792684',
  'price': '21'},
 {'link': 'https://www.skinstore.com/laura-geller-iconic-baked-sculpting-lipstick-chocolate-rasberry/11638314.html?switchcurrency=USD&shippingcountry=US',
  'price': '21.0'},
 {'link': 'https://shop.nordstrom.com/S/4125441?utm_source=rakuten&utm_medium=affiliate&utm_campaign=datafeed&utm_content=Women:Makeup:Lip&utm_term=5000548&utm_channel=affiliate_ret_p&sp_source=rakuten&sp_campaign=datafeed',
  'price': 21},
 {'link': 'https://www.macys.com/shop/product/laura-geller-beauty-iconic-baked-sculpting-lipstick-cream?ID=5713197&PartnerID=LINKSHARE&cm_mmc=LINKSHARE-_-4-_-41-_-MP441',
  'price': '21.00',
  'stock': True}]

相关问题 更多 >