Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 22, 2016 17:14:40

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

Решаю одну из базовых гугловских задачек по питону.
Необходимо посчитать сколько раз каждое слово встречается в тексте.
Набросал вариант, но кое-что не нравится.

 f = open('small.txt')
m_list = ''
m_dict = {}
for line in f:
    m_list += line.lower()    
m_list = m_list.replace(' ','\n').split('\n')
m_dict = dict.fromkeys(m_list)
for name in m_dict:
    m_dict[name] = 0
for name in m_list:
        if name in m_dict:
            m_dict[name] += 1
for name in m_dict:
    print(str(name) + ' => ' + str(m_dict[name]))
Как можно по-проще инициировать значения словаря m_dict int'овскими значениями? Сие необходимо, ибо иначе компилятор не даёт инкрементировать значения словаря, т.к. по умолчанию инициируются они None

Офлайн

#2 Авг. 22, 2016 17:17:57

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

coffe4wolf
1) dict.fromkeys(, 0)
2) from collection import defaultdict
3) для подсчета
from collections import Counter

Офлайн

#3 Авг. 22, 2016 21:52:19

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

Инициация значений словаря int'овскими значениями

 m_dict = {}
with  open('small.txt') as file:
   m_list = [i.lower() for i in file.read().split()]
for key in set(m_list):
    m_dict[key] = str(m_list.count(key))
for key,value in m_dict.items():
    print('слов "{}"  в тексте - {} '.format(key,value))
хотя вообще без словаря можно обойтись
 with  open('small.txt') as file:
   m_list = [i.lower() for i in file.read().split()]
   for key in set(m_list):
       print(key,'=>',m_list.count(key)

Офлайн

#4 Авг. 25, 2016 10:59:31

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

спасибище всем, перепилил немного
Теперь вопрос - как вывести n ключей словаря?
Я написал вывод через счётчик, но как я понимаю это не предпочтительный метод вывода на питоне

Отредактировано coffe4wolf (Авг. 25, 2016 11:41:34)

Офлайн

#5 Авг. 25, 2016 11:50:40

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

Инициация значений словаря int'овскими значениями

 print(m_dict.keys()[:n])
Только порядок там будет неочевидным.

Офлайн

#6 Авг. 25, 2016 12:17:44

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

Инициация значений словаря int'овскими значениями

Shaman
  
print(m_dict.keys()[:n])
Это только во втором питоне сработает.

  
>>> d = {1: 2, 3: 4}
>>> d.keys()[:2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict_keys' object is not subscriptable
>>> 

  
>>> d = {1: 2, 3: 4}
>>> list(d)[:2]
[1, 3]
>>>



Офлайн

#7 Авг. 25, 2016 12:22:51

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

Немного неправильно сформулировал
Нужно вывести n первых отсортированных пар словаря

Офлайн

#8 Авг. 25, 2016 12:30:04

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

Инициация значений словаря int'овскими значениями

coffe4wolf
Нужно вывести n первых отсортированных пар словаря
  
>>> d = {1: 2, 3: 4, 5: 6, 0: 0}
>>> 
>>> sorted(d.items())[:2]
[(0, 0), (1, 2)]
>>>



Отредактировано py.user.next (Авг. 25, 2016 12:30:57)

Офлайн

#9 Авг. 25, 2016 12:31:15

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

Инициация значений словаря int'овскими значениями

py.user.next
Это только во втором питоне сработает.
Точно. Варвары…
coffe4wolf
Нужно вывести n первых отсортированных пар словаря
Отсортированных по какому признаку?

Офлайн

#10 Авг. 25, 2016 12:33:48

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Инициация значений словаря int'овскими значениями

Shaman
по значениям ключей. То есть на первом месте слова, которые встречаются в тексте чаще всего

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version