2015-07-27 3 views
0

Я новичок в функции счетчика и сопоставления. Я пишу функцию, которая принимает строку и подсчитывает разные слова и выходы в словаре слова и сколько раз они появляются.Mapping/Counter, Python

У меня есть вопросы по карте и функции счетчика. Я знаю, что мой следующий код работает, но я не уверен, что я действительно понимаю, мне нужно назначить свою входную строку «strs» и использовать ее в функции карты.

Я также не уверен, как печатать словарь без слова «счетчик»:

def wordCount(inputString): 

    from collections import Counter 
    strs = inputString 
    c = Counter(map(str.lower,strs.split())) 
    print c 

inputString = 'I like pizza, beer, and more pizza' 
wordCount(inputString) 
+0

Возможный дубликат [Удаление «счетчика» из словаря python] (http://stackoverflow.com/questions/11731633/removing-counter-from-dictionary-python) –

+0

исправил проблему с печатью, но не уверен на strs и функцию отображения, которую я имею. зачем мне нужны str и strs? Я получаю сообщение об ошибке, когда удаляю – madman

ответ

1

Попробуйте использовать Counter.items(), который возвращает список кортежей (element, count) и итерация этот список и печать каждого элемента.

1

Вам не нужно вводить строку ввода в strs, я считаю, что это не приносит никакой пользы.

Кроме того, для печати счетчика в качестве словаря, без Counter используйте dict(counter), пример -

>>> from collections import Counter 
>>> l = [1,2,3,4,1,2,3,4,5] 
>>> x= Counter(l) 
>>> print(dict(x)) 
{1: 2, 2: 2, 3: 2, 4: 2, 5: 1} 

Demo с вашим примером -

>>> def wordCount(inputString): 
...  from collections import Counter 
...  c = Counter(map(str.lower,inputString.split())) 
...  print(dict(c)) 
... 
>>> inputString = 'I like pizza, beer, and more pizza' 
>>> wordCount(inputString) 
{'more': 1, 'pizza,': 1, 'like': 1, 'i': 1, 'pizza': 1, 'and': 1, 'beer,': 1} 
+0

сработала печать, но я не думаю, что ваш метод работает для строк - он подсчитывает каждое отдельное письмо. – madman

+0

@madman это зависит от того, как был создан счетчик, преобразование в dict() не изменило бы содержимое счетчика, пожалуйста, обратите внимание, что это просто пример, основная часть - это только часть dict(), вам не нужно измените, как вы создаете счетчик –

+0

@madman, пожалуйста, проверьте последнее обновление, я добавил демонстрацию с вашим примером. –

-1

Это другой способ сделать это :

words = 'I like pizza, beer, and more pizza'.split() 
d = {} 
for word in words: 
    word = word.strip(',') 
    d[word] = d.get(word, 0) +1 
print d 

Выход:

{'and': 1, 'like': 1, 'I': 1, 'beer': 1, 'pizza': 2, 'more': 1} 

Я удалил запятые, предполагая, что вы хотите считать слова без запятых.