У меня есть объект с переменными "цена", "заголовок" и "город". Я хочу заказать их по цене:

itemlist.sort(key = lambda x: x._price)
for i in itemlist:
    print(i._price, i._title, i._city)

Предполагая, что у меня есть цены ["$1", "$3", "$22", "$12"]. Он сортирует их ["$1", "$12", "$22", "$3"], когда я хочу, чтобы это было ["$1", "$3", "$12", "$22"].

Я знаю, что это потому, что цена считается строкой, а не int, но я не знаю, как преобразовать ее в int ради сортировки.

0
Zevvysan 13 Мар 2018 в 00:00

2 ответа

Лучший ответ

Вы можете преобразовать элементы списка в int, удалив '$'. Одним из способов является использование str.strip():

itemlist.sort(key = lambda x: int(x._price.strip('$'))

Или, если вы открыты для использования регулярных выражений, вы можете отфильтровать не-цифры:

import re
itemlist.sort(key = lambda x: int(re.sub("[^0-9]", "", x._price)))

Где [^0-9] означает совпадение со всем, что не является цифрой.

3
pault 12 Мар 2018 в 21:58

Наивное исправление, предполагающее, что все ценовые строки начинаются с $:

itemlist.sort(key=lambda x: float(x._price[1:]))

Но, вероятно, лучше всего не указывать $ своих цен, а добавлять их только тогда, когда вы печатаете цену. Сохраните цену как float или как int. Это также позволит вам делать обычную математику с вашими ценами, которую вы не можете легко сделать со строками.

1
0x5453 12 Мар 2018 в 21:03