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

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

问题

正如评论中提到的(即Hampus-Larsson(,您的数据必须是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}]

最新更新