Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2015 20:16:01

Pawl
Зарегистрирован: 2015-05-25
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

Shaman
Это на любом языке будет копрокодом.
Вот я и попросил указания путей к сокращению. Ладно, сортировки списков слов мне привели много, спасибо, но, как уже тут было сказано, к меня из словаря получается не список отдельных слов, а список пар ключ-значение. Примеры сортировок списков слов к списку пар не подходят. Может, покажете, как кратко сортировать список пар?

Офлайн

#2 Май 25, 2015 20:18:41

Pawl
Зарегистрирован: 2015-05-25
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

FishHook
Рабочий вариант сортировки по всему слову предлагал py.user.next
Чем он вам не нравится?
Он на сортировке списка из пар (слово, число) выдаёт мне ошибку. Я уже про это писал.

Офлайн

#3 Май 25, 2015 20:28:25

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

FishHook
Рабочий вариант сортировки по всему слову предлагал py.user.next
Мда. Кортежи, оказывается, сравниваются не как строки…

Офлайн

#4 Май 25, 2015 20:41:36

Pawl
Зарегистрирован: 2015-05-25
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

Shaman
Мда. Кортежи, оказывается, сравниваются не как строки…
Знаете, я надеялся на конструктив, а нарываюсь на сарказм. Если есть способ сделать мою задачу с меньшим количеством кода, чем у меня, покажите мне его, а если нет, так и скажите. Не надо тратить свое время на бессодержательные посты.

Офлайн

#5 Май 25, 2015 20:44:30

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

Pawl
Знаете, я надеялся на конструктив, а нарываюсь на сарказм. Если есть способ сделать мою задачу с меньшим количеством кода, чем у меня, покажите мне его, а если нет, так и скажите. Не надо тратить свое время на бессодержательные посты.
Пост адресовался не Вам и я заинтересован в нахождении оптимального решения данной проблемы не меньше вашего. Остыньте.

Отредактировано Shaman (Май 25, 2015 20:44:51)

Офлайн

#6 Май 25, 2015 20:55:15

Pawl
Зарегистрирован: 2015-05-25
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

Shaman
Пост адресовался не Вам и я заинтересован в нахождении оптимального решения данной проблемы не меньше вашего. Остыньте.
Тогда надеюсь, что вы его найдёте!

Офлайн

#7 Май 25, 2015 21:00:30

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

Pawl
Тогда надеюсь, что вы его найдёте!
Суть проблемы в отсутствии правильной таблицы/таблиц трансляции. Вопрос в том, где и какие они должны быть.
По сортировке списка списков. Она так же производится при помощи key-функции.
Для сортировки по первому столбцу:
sorted([[1,2],[3,4]], key=lambda x: x[0])
или, красивше
from operator import itemgetter
sorted([[1,2],[3,4]], key=itemgetter(0))

Отредактировано Shaman (Май 25, 2015 21:17:36)

Офлайн

#8 Май 25, 2015 23:24:51

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

> Он на сортировке списка из пар (слово, число) выдаёт мне ошибку. Я уже про это писал.

idx = [u"а", u"ё", u"е", u"я"]
sorted([(u"а", 1), (u"ё",2), (u"е",3)], key=lambda x: idx.index(x[0][0]))



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Май 26, 2015 01:51:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

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'ы я недавно объяснял.



Отредактировано py.user.next (Май 26, 2015 02:04:23)

Офлайн

#10 Май 26, 2015 09:05:47

Pawl
Зарегистрирован: 2015-05-25
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

сортировка русских слов компаратором

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)
так тоже заработало, я просто тупанул. Всем спасибо, проблема решена, я получил инфу к размышлению, тему закрываю.

Отредактировано Pawl (Май 26, 2015 09:31:05)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version