У меня есть объект с переменными "цена", "заголовок" и "город". Я хочу заказать их по цене:
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 ради сортировки.
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]
означает совпадение со всем, что не является цифрой.
Наивное исправление, предполагающее, что все ценовые строки начинаются с $
:
itemlist.sort(key=lambda x: float(x._price[1:]))
Но, вероятно, лучше всего не указывать $
своих цен, а добавлять их только тогда, когда вы печатаете цену. Сохраните цену как float
или как int
. Это также позволит вам делать обычную математику с вашими ценами, которую вы не можете легко сделать со строками.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.