Я создал массив с описанием и ценой, но не могу настроить сортировку по цене. Может ли кто-нибудь помочь мне или подсказать, почему сортировка по цене не выполняется правильно? Я проверил тип цены и оказался плавающим. Насколько я понимаю, должно работать. Я тоже не получаю ошибку. Однако продукция не сортируется по цене. :/
Создайте массив
import array
newlist = []
for d in products:
desc =d.description
price=d.price
#print(type(price))
newlist.append(f"{desc}:{price}")
вывод нового списка
['Coors Light American-style Light Lager Beer:16.99', 'Coors Light American-style Light Lager Beer:26.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:18.99', 'Samuel Adams Summer Ale Seasonal Beer:19.99', 'Miller Lite American Pilsner Light Lager Beer:22.99', 'Miller Lite American Pilsner Light Lager Beer:26.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:26.99', 'Bud Light Lager Beer:32.99', 'Samuel Adams Summer Ale Seasonal Beer:10.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:33.99', 'Busch Light Domestic Lager Beer:31.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:26.99', 'Coors Banquet American Lager Beer:16.99', 'Stella Artois Premium Lager Beer:20.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:34.99', "Leinenkugel's Summer Shandy Craft Beer:19.99", 'Coors Light American-style Light Lager Beer:22.99', 'Blue Moon Belgian-Style Ale White Wheat Beer:19.99', 'Blue Moon Belgian-Style Ale White Wheat Beer:19.99', 'Heineken Original Lager Beer, 12 Pack, 12 fl oz Bottles:20.99']
Попробуйте отсортировать по цене
import operator
getcount = itemgetter(int(1))
list(map(getcount, newlist))
sortedlist = sorted(newlist, key=getcount)
for l in sortedlist:
print(l)
Выход
Samuel Adams Summer Ale Seasonal Beer:10.99
Leinenkugel's Summer Shandy Craft Beer:19.99
Heineken Original Lager Beer, 12 Pack, 12 fl oz Bottles:20.99
Michelob ULTRA Superior Light Domestic Lager Beer:18.99
Miller Lite American Pilsner Light Lager Beer:22.99
Miller Lite American Pilsner Light Lager Beer:26.99
Michelob ULTRA Superior Light Domestic Lager Beer:26.99
Michelob ULTRA Superior Light Domestic Lager Beer:33.99
Michelob ULTRA Superior Light Domestic Lager Beer:26.99
Michelob ULTRA Superior Light Domestic Lager Beer:34.99
Blue Moon Belgian-Style Ale White Wheat Beer:19.99
Blue Moon Belgian-Style Ale White Wheat Beer:19.99
Dos Equis Mexican Lager Beer, 12 Pack, 12 fl oz Bottles:19.99
Coors Light American-style Light Lager Beer:16.99
Coors Light American-style Light Lager Beer:26.99
Coors Banquet American Lager Beer:16.99
Coors Light American-style Light Lager Beer:22.99
Stella Artois Premium Lager Beer:20.99
Bud Light Lager Beer:32.99
Busch Light Domestic Lager Beer:31.99
Очень похоже на stackoverflow.com/q/78643742/238704, где также не хватало важных деталей.
Возможно, попробуйте сначала отсортировать, а затем преобразовать в строку:
sortedlist = sorted(products, key=lambda d: d.price)
newlist = []
for d in sortedlist:
desc =d.description
price=d.price
newlist.append(f"{desc}:{price}")
print(newlist)
Это сработало. Спасибо
Я бы предложил понимание списка: newlist = [f"{d.description}:{d.price}" for d in sortedlist]
itemgetter(int(1))
Это то же самое, что иitemgetter(1)
, который получает второй элемент последовательности, а поскольку это строки, сортировка выполняется по второй букве строки.