1
resposta

Dúvidas no "colocando tudo em prática" - Contador de letras

Oi pessoal, tudo bem? Consegui replicar o "colocando tudo em prática", mas ainda fiquei com duas dúvidas que estão correlacionadas. Será que conseguem me ajudar?

Pergunta 1:

Neste trecho:

  proporcoes = [(letra, frequencia / total_de_caracteres) for letra, frequencia in aparicoes.items()]
  proporcoes = Counter(dict(proporcoes))

Após a criação do listcomp, se o próprio "counter" já cria um dict, porque necessariamente eu preciso passar o counter como um dict, conforme exposto na aula? Existe alguma função no counter que não possa ser acessada se não for passado como um dict?

Pergunta 2 (no mesmo trecho da pergunta 1):

Porque necessariamente foi criado um dict pras proporções? Existe alguma outra vantagem ou é somente por poder usar o "most.common" e organizar os valores do maior pro menor com o "counter"? Existe alguma forma de fazer todas as ordenações mantendo o "proporcoes" como uma lista?

Fora isso, compartilho abaixo o meu código. Fiz duas adaptações:

  1. No próprio listcomp eu já fiz o cálculo pra multiplicar por 100 e difini as casas do float
  2. Apliquei o most.common na própria linha do "Counter"

Ficou assim:

def define_texto(texto):
   
    texto_higi = texto.lower()
    dict_letras = Counter(texto_higi)
    qtd_total_letras = sum(dict_letras.values())
    print(qtd_total_letras)


    valor_relativo = [(letras, ("{:.2f}%".format(100*(incidencia/qtd_total_letras)))) for letras, incidencia in dict_letras.items()]
    valor_relativo_mais_comuns = Counter(dict(valor_relativo)).most_common(10)
    
    for letra, percentual in valor_relativo_mais_comuns:    
        print(letra, "-->" , percentual)

Valeu!!!

1 resposta

Oi Rafael! Tudo bem?

Em relação à primeira pergunta, no trecho de código mencionado, o Counter é usado para criar um dicionário a partir da lista de tuplas proporcoes. O motivo de passar o Counter como um dict é que, por padrão, o Counter retorna um objeto do tipo Counter, que é uma subclasse de dict com algumas funcionalidades adicionais. No entanto, se quisermos apenas um dicionário com as proporções, é possível passar o Counter como um dict para obter o mesmo resultado.

Em relação a segunda pergunta, a criação de um dicionário para as proporções permite utilizar o método most_common do Counter, que retorna os itens mais comuns em ordem decrescente de frequência. Se quisermos manter as proporções como uma lista, é possível fazer isso, mas você não terá acesso ao método most_common diretamente. No entanto, podemos criar uma função auxiliar para ordenar a lista de proporções de acordo com a frequência.

Sobre as adaptações no código, elas estão corretas e podem ser uma forma de simplificar o código. O cálculo das proporções diretamente no list comprehension e a aplicação do most_common na mesma linha do Counter são boas práticas para deixar o código mais conciso.

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓