Найти - Пользователи
Полная версия: сортировка русских слов компаратором
Начало » Python для новичков » сортировка русских слов компаратором
1 2 3 4 5
Pawl
Shaman
Это на любом языке будет копрокодом.
Вот я и попросил указания путей к сокращению. Ладно, сортировки списков слов мне привели много, спасибо, но, как уже тут было сказано, к меня из словаря получается не список отдельных слов, а список пар ключ-значение. Примеры сортировок списков слов к списку пар не подходят. Может, покажете, как кратко сортировать список пар?
Pawl
FishHook
Рабочий вариант сортировки по всему слову предлагал py.user.next
Чем он вам не нравится?
Он на сортировке списка из пар (слово, число) выдаёт мне ошибку. Я уже про это писал.
Shaman
FishHook
Рабочий вариант сортировки по всему слову предлагал py.user.next
Мда. Кортежи, оказывается, сравниваются не как строки…
Pawl
Shaman
Мда. Кортежи, оказывается, сравниваются не как строки…
Знаете, я надеялся на конструктив, а нарываюсь на сарказм. Если есть способ сделать мою задачу с меньшим количеством кода, чем у меня, покажите мне его, а если нет, так и скажите. Не надо тратить свое время на бессодержательные посты.
Shaman
Pawl
Знаете, я надеялся на конструктив, а нарываюсь на сарказм. Если есть способ сделать мою задачу с меньшим количеством кода, чем у меня, покажите мне его, а если нет, так и скажите. Не надо тратить свое время на бессодержательные посты.
Пост адресовался не Вам и я заинтересован в нахождении оптимального решения данной проблемы не меньше вашего. Остыньте.
Pawl
Shaman
Пост адресовался не Вам и я заинтересован в нахождении оптимального решения данной проблемы не меньше вашего. Остыньте.
Тогда надеюсь, что вы его найдёте!
Shaman
Pawl
Тогда надеюсь, что вы его найдёте!
Суть проблемы в отсутствии правильной таблицы/таблиц трансляции. Вопрос в том, где и какие они должны быть.
По сортировке списка списков. Она так же производится при помощи key-функции.
Для сортировки по первому столбцу:
sorted([[1,2],[3,4]], key=lambda x: x[0])
или, красивше
from operator import itemgetter
sorted([[1,2],[3,4]], key=itemgetter(0))
Rodegast
> Он на сортировке списка из пар (слово, число) выдаёт мне ошибку. Я уже про это писал.
idx = [u"а", u"ё", u"е", u"я"]
sorted([(u"а", 1), (u"ё",2), (u"е",3)], key=lambda x: idx.index(x[0][0]))
py.user.next
Pawl
Спасибо за пример, но вы укзываете сортировку списка, а у меня - карта (или словарь по-питонски ) К сожалению, ваш вариант с картой не проходит.

Я думал, ты сможешь переделать, поэтому просто показал, как нужно сделать компаратор.

>>> lst = [('а', 1), ('б', 1), ('е', 1), ('ё', 1),
...        ('А', 1), ('Б', 1), ('Е', 1), ('Ё', 1),
...        ('ба', 1), ('вб', 1), ('ёе', 1), ('жё', 1),
...        ('БА', 1), ('ВБ', 1), ('ЁЕ', 1), ('ЖЁ', 1)]
>>> 
>>> def tr(s):
...     alpha = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' \
...             'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
...     return tuple(map(alpha.index, s))
... 
>>> lst.sort(key=lambda i: tr(i[0]))
>>> lst
[('а', 1), ('б', 1), ('ба', 1), ('вб', 1), ('е', 1), ('ё', 1), ('ёе', 1), ('жё', 1), ('А', 1), ('Б', 1), ('БА', 1), ('ВБ', 1), ('Е', 1), ('Ё', 1), ('ЁЕ', 1), ('ЖЁ', 1)]
>>>

Pawl
Что-то мне подсказывает, что если в языке не предусмотрена возможность сортировки карт “искаропки”
Не, ты просто не понимаешь язык, потому что пытаешься понять его, основываясь на своих знаниях других языков. Это примерно как сисадмин думает, что раз он давно сисадмин, то он и программист неплохой.

Pawl
лямбды я в питоне не понимаю
Про lambda'ы я недавно объяснял.
Pawl
Rodegast
Он на сортировке списка из пар (слово, число) выдаёт мне ошибку. Я уже про это писал.

idx =
sorted(, key=lambda x: idx.index(x))

Так сортировка проходит корректно только по первым буквам:
idx = [u"а", u"б", u"в", u"г", u"д", u"е", u"ё", u"ж", u"з", u"и", u"й", u"к", u"л", u"м", u"н",
       u"о", u"п", u"р", u"с", u"т", u"у", u"ф", u"х", u"ц", u"ч", u"ш", u"щ", u"ъ", u"ы", u"ь",
       u"э", u"ю", u"я"]
for i in sorted([(u"метла", 1), (u"улитка", 3), (u"мороз", 1), (u"ёжик", 1), (u"емеля", 1),
                 (u"ежевика", 3), (u"ель", 2), (u"ёлка", 3), (u"метёлка", 1),
                 (u"муляж", 1), (u"мёд", 1)], key=lambda x: idx.index(x[0][0])):
    print(i)
вторая буква ё уже сортируется не корректно:
('емеля', 1)
('ежевика', 3)
('ель', 2)
('ёжик', 1)
('ёлка', 3)
('метла', 1)
('мороз', 1)
('метёлка', 1)
('муляж', 1)
('мёд', 1)
('улитка', 3)
py.user.next
Я думал, ты сможешь переделать, поэтому просто показал, как нужно сделать компаратор.
lst = [('метла', 1), ('улитка', 3), ('мороз', 1), ('ёжик', 1), ('емеля', 1),
       ('ежевика', 3), ('ель', 2), ('ёлка', 3), ('метёлка', 1),
       ('муляж', 1), ('мёд', 1)]
def tr(s):
    alpha = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' \
        'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
    return tuple(map(alpha.index, s))
lst.sort(key=lambda i: tr(i[0]))
for j in list:
    print(j)
так выходит ошибка
C:\Python34\python.exe CUsers/Pawl/IdeaProjects/pyFirst/first.py
Traceback (most recent call last):
File “CUsers/Pawl/IdeaProjects/pyFirst/first.py”, line 12, in <module>
for j in list:
TypeError: ‘type’ object is not iterable
использую питон версии 3.4.3
UPD
print(lst) - так заработало! Ну-ка поразбираюсь ещё с Вашим примером! Спасибо, плюсую!
UPD UPD
for j in items:
print(j)
так тоже заработало, я просто тупанул. Всем спасибо, проблема решена, я получил инфу к размышлению, тему закрываю.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB