Уведомления

Группа в Telegram: @pythonsu

#1 Май 31, 2019 17:22:50

mikhail999w
Зарегистрирован: 2019-05-31
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Функциональное программирование пример

Подскажите новичку изучающему
Есть простая функция - она выбирает из словаря по значению самые частые слова
На входе словарь , а на выходе список с топ 5 частных слов
Написал ее как думал то есть “кривенько”. Работает
Хочу покрасивее в стиле функционального программирования - comprehension или range или что еще

 #dicc словарь "Дом":(int)4 "Сон":(int)6 
def print_sort5():
    max = [0, 0, 0, 0, 0, 0]
      for wordA in dicc:
        max.sort()
        i = 0
        for t in max:
            if (dicc[wordA] > t):
                max[i] = dicc[wordA]
                break
        i = + 1
    print(max)
    print(dicc)

Писал еще версию с operator.itemgetter(1), но не понравилось и и пишут скорость выполнения не айс.
 #max_index, max_value = max(enumerate(dicc), key=operator.itemgetter(0))

Отредактировано mikhail999w (Май 31, 2019 17:24:29)

Офлайн

#2 Май 31, 2019 17:32:45

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Функциональное программирование пример

а где так учат записывать числа в словарь
“Дом”:(int)4 “Сон”:(int)6 ?

Офлайн

#3 Май 31, 2019 17:45:55

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Функциональное программирование пример

mikhail999w
Есть простая функция - она выбирает из словаря по значению самые частые слова
На входе словарь , а на выходе список с топ 5 частных слов
в результате только выдает список с цифрами. а где топ 5 частных слов ? кривенько это просто сказано. ваша функция работает совсем не так как требуется. а вы в курсе что словарь можно отсортировать по значениям на уменьшение и вывести срез 5 первых ключей? так же можно из словаря получить список кортежей (ключ,значение) а если применить к кортежу реверс или срез то
 (ключ,значение)[::-1]
станет (значение,ключ) и простая сортировка списка даст нужный результат только максимальные будут в конце но срез последних 5 элементов даст нужный результат

Отредактировано marvellik (Май 31, 2019 17:46:50)

Офлайн

#4 Май 31, 2019 18:14:10

mikhail999w
Зарегистрирован: 2019-05-31
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Функциональное программирование пример

“Дом”int)4 “Сон”int)6 ? это я из отладчика скопировал)))
я на анг форуме нашел такой вариант он работает

 dicc.sort(key=lambda x: x[1])
max_index, max_value = max(enumerate(dicc), key=operator.itemgetter(0))

а если применить к кортежу реверс или срез то
А можно поподробнее?
Отсортировать а потом вот так?
 [-5:]

Отредактировано mikhail999w (Май 31, 2019 18:20:25)

Офлайн

#5 Май 31, 2019 20:10:30

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

Функциональное программирование пример

 >>> dct = {"дом":6, "сон":4, "слон":1000, "дын":1, "два":2, "дэвять":9}
>>> sorted(dct, key=lambda x: -dct[x])
['слон', 'дэвять', 'дом', 'сон', 'два', 'дын']



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

Офлайн

#6 Май 31, 2019 20:38:02

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Функциональное программирование пример

 def print_sort5():
    print( sorted(dicc,key = lambda x : dicc[x],reverse = True)[:5])
dicc = {"дом":6, "сон":4, "слон":1000, "дын":1, "два":2, "дэвять":9}
print_sort5()

или как описано выше только срез 5 элементов добавьте
 ==
['слон', 'дэвять', 'дом', 'сон', 'два']
>>> )

Отредактировано marvellik (Май 31, 2019 20:41:49)

Офлайн

#7 Июнь 1, 2019 04:18:37

mikhail999w
Зарегистрирован: 2019-05-31
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Функциональное программирование пример

спасибо!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version