print(items)
Rodegastу него первый символ “метла”
Смотри что из файла идёт. Первого символа нет в списке/словаре.
>>> lst = ['а', 'б', 'е', 'ё', ... 'А', 'Б', 'Е', 'Ё', ... 'ба', 'вб', 'ёе', 'жё', ... 'БА', 'ВБ', 'ЁЕ', 'ЖЁ'] >>> >>> def tr(s): ... alpha = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' \ ... 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' ... return tuple(map(alpha.index, s)) ... >>> lst.sort(key=tr) >>> lst ['а', 'б', 'ба', 'вб', 'е', 'ё', 'ёе', 'жё', 'А', 'Б', 'БА', 'ВБ', 'Е', 'Ё', 'ЁЕ', 'ЖЁ'] >>>
PawlКонечно, есть. У тебя код больше дельфийский, а там как бы не принятно использовать функциональные фишки.
Или есть более простой путь, который я не нашел?
py.user.nextДа, с этим у меня проблемы
Конечно, есть. У тебя код больше дельфийский, а там как бы не принятно использовать функциональные фишки.
Спасибо за пример, но вы укзываете сортировку списка, а у меня - карта (или словарь по-питонски
) К сожалению, ваш вариант с картой не проходит.ShamanДа, я делал вариант по аналогии:
http://stackoverflow.com/questions/1097908/how-do-i-sort-unicode-strings-alphabetically-in-python
from codecs import open from re import split import locale text = open("load", "r", "utf-8") s = text.read() words = split('[\d\W]+', s) d = {} for w in words: if w != '': if w in d: d[w] += 1 else: d[w] = 1 items = list(d.items()) locale.setlocale(locale.LC_ALL, "") items.sort(key=lambda item: locale.strxfrm(item[0])) for i in items: print(i)
items = list(d.items())
FishHook
у тебя там не отдельные слова
FishHookДа, стало ясно, спасибо.
Сделай уже print(items) и всё станет ясно.
FishHookДействительно, у меня в списке пары слово-количество.
Вот тут ты делаешь из словаря список кортежей
d = [u'ё', u'ель', u'ямка', u'ёлочка', u'упырь', u'ёжик', u'ё моё', u'е', u'ельник', u'ежовый', u'ягель'] ALPHABET = {i[1]: i[0] for i in enumerate(u"абвгдеёжзийклмнопрстуфхцчшщъыьэюя")} for i in sorted(d, key=lambda x: ALPHABET[x[0].lower()]): print (i)
from codecs import open from re import split text = open("load", "r", "utf-8") s = text.read() words = split('[\d\W]+', s) d = {} for w in words: if w != '': if w in d: d[w] += 1 else: d[w] = 1 items = list(d.items()) ALPHABET = {i[1]: i[0] for i in enumerate(u"абвгдеёжзийклмнопрстуфхцчшщъыьэюя")} sorted(items, key=lambda x: ALPHABET[x[0][0].lower()]) for i in items: print(i)
corpus = [u'ё', u'ель', u'ямка', u'ёлочка', u'упырь', u'ёжик', u'ё моё', u'е', u'ельник', u'ежовый', u'ягель'] import locale locale.setlocale(locale.LC_ALL, "") corpus.sort(cmp=locale.strcoll) # corpus.sort(key=locale.strxfrm) print ' '.join(corpus)
е ё ё моё ёжик ежовый ёлочка ель ельник упырь ягель ямка