vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Вот в [livejournal.com profile] ru_python поставили задачу - имеется словарь. Выдать список строк вида
"ключ: значение", отсортированный порядке убывания значений.
Поскольку питон я знаю плохо, попробовал порешать.

Поскольку питон, опять таки знаю плохо, сначала придумал ответ на perl

map("$_: $x{$_}",sort($x{b}<=>$x{a},keys %hash));

Потом стал переводить на python. Обнаружил что в питоне в данном конкретном случае есть более удобный функционал у сортировки - подменять не функцию сравнения, а функцию извлечения ключа из элемента списка

Получилось:

[ x+" "+str(d[x]) for x in sorted( d.keys(), key=lambda(x): -d[x]]

Еще немного почитав про словари, я узнал что в питоне у словаря есть в данном случае метод items, который позволяет обойтись без знания глобального имени словаря:

[ x[0]+" "+str(x[1]) for x in sorted(d.items(), key=lambda(x): -x[1]]

НА сем и успокоился, и стал читать решения других читателей сообщества. Обнаружил что все как один испольуют вместо lambda импорт из модуля operator

from operator import getitem;

... key=getitem(1)


getitem описан как функция с двумя элементами. То есть тут еще и currying используется. Почему это для всех питонистов, соизволивших ответить на этот вопрос, сочетание импорта модуля, который фактически лезет куда-то в потроха интерпретатора, вроде перлового Opcode с currying кажется куда более естественным, чем старая добрая lambda?

Кто-то там собрался и провел бенчмарки, так мое решение с lambda, которое на мой взгляд, куда проще и естественней читается, оказалось вторым по скорости после решения [livejournal.com profile] avysk, которое вообще-то решением не является, а явялется только демонстрацией одного из шагов в решении (не тот порядок сортировки, нет преобразования tuple в строку через заданный разделитель)

Правда, у человека который предложил самое быстрое решение с getitem-ом испольузется кроме sorted еще и reversed, в то время как мне lambda позволяет просто поменять знак у ключей.

Господа питонисты, объясните откуда такая любовь к getitem-у берется.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 2nd, 2025 07:39 pm
Powered by Dreamwidth Studios