подсчет букв (только букв) в длинной строке (python 2.72) - PullRequest
0 голосов
/ 02 декабря 2011

мне нужно написать функцию, которая получает длинную строку и помещает в словарь каждая буква, и это частота появления в строке. Я написал следующую функцию, но проблема в том, что она не игнорирует пробелы, числа и т. д. Меня попросили использовать функцию symbol in string.ascii_lowercase, но я не знаю, как это сделать. это мой код:

def calc_freq(txt):
   dic={}
   for letter in range(len(txt)):
           if dic.has_key(txt[letter])==True:
                dic[txt[letter]] += 1
           else:
            dic[txt[letter]] = 1
   return dic

спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

просто для удовольствия:

s = 'Type "help", "copyright", "credits" or "license" for more information.'
print dict(filter(lambda i: str.isalnum(i[0]), set(zip(a,map(a.count,a)))))

{'a': 1, 'c': 3, 'e': 6, 'd': 1, 'g': 1,'f': 2, 'i': 5, 'h': 2, 'm': 2, 'l': 2, 'o': 6, 'n': 3, 'p': 3, 's': 2,' r ': 6,' t ': 3,' y ': 2,' T ': 1}

0 голосов
/ 02 декабря 2011
import string

s = 'oasndoasndoansdakls'
count = []
dictionary = {}

for x in set(s):
     if x in string.ascii_lowercase:
          dictionary[x] = s.count(x)

print (dictionary)

это создаст словарь символов и их количества и включит их, только если они находятся в списке string.ascii_lowercase.


Вот как это использовать в вашем коде:

import string

def calc_freq(txt):
     dic={}
     for letter in txt:
          if letter in string.ascii_lowercase:
               if letter in dic:
                    dic[letter] += 1
               else:
                    dic[letter] = 1
     return dic

вам просто нужно было добавить if, прежде чем добавлять букву в словарь или увеличивать ее количество.

Я также удалил letter in range(txt) и txt[letter], вы можете получить доступ к каждому характеру напрямую в python, потому что строка является iterable и может рассматриваться как список.

...