Подсчет количества букв в переменной с использованием словаря в python - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу написать код, который будет принимать ввод букв и возвращать вывод о том, сколько раз эти буквы появлялись в переменной. Вот что у меня есть:

#Letter Count
def letter_count(letters):
  number_counts = {'a':'1','b':'2','c':'3','d':'4','e':'5','f':'6','g':'7','h':'8','i':'9','j':'10','k':'11','l':'12','m':'13','n':'14','o':'15','p':'16','q':'17','r':'18','s':'19','t':'20','u':'21','v':'22','w':'23','x':'24','y':'25','z':'26'}
  str_int = str(letters)
  int_name = ''
  for char in str_int:
    int_name = int_name + number_counts[char] + ' '
  return int_name.strip()

Вместо того, чтобы возвращать что-то вроде a: 1 или u: 0, он вернет 1 или 21. Вот несколько тестовых примеров того, что он должен делать и что он делает сейчас.

#What it should do
letter_count(arthur)
{'a': 3, 'b': 2, 'c': 0, 'd': 3, 'e': 5, 'f': 2, 'g': 4, 'h': 0, 'i': 7, 'j': 0, 'k': 0, 'l': 1, 'm': 3, 'n': 9, 'o': 7, 'p': 1, 'q': 0, 'r': 5, 's': 10, 't': 5, 'u': 1, 'v': 1, 'w': 2, 'x': 0, 'y': 2, 'z': 0}
letter_count('')
{'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
#what it does now
letter_count(abc)
1 2 3
letter_count(hi)
8 9

Как мне это исправить?

Ответы [ 4 ]

0 голосов
/ 05 февраля 2020

Используя коллекции, вы можете достичь этого

from collections import Counter
def letter_count(arthur):
    return dict(Counter(arthur))

print(letter_count('arthur'))



Вывод:

output =  {'a': 1, 'r': 2, 't': 1, 'h': 1, 'u': 1}
0 голосов
/ 05 февраля 2020

Не прямое исправление вашего текущего кода, но просто хотелось оставить здесь эту опцию, которая предназначена для решения вашей функциональной цели. Он использует collection.Counter и преобразует результат из most_common () в dict

import string
import collections

alphabet_dict = dict.fromkeys(string.ascii_lowercase, 0) 
alphabet_dict.update(dict(collections.Counter(list('arthur')).most_common()))
>>> {'a': 1, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 1, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 2, 's': 0, 't': 1, 'u': 1, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
0 голосов
/ 05 февраля 2020

Подсчет вхождения букв в слове

myStr = 'linuxandunixrocks'

counter = {}

for char in myStr:

  if char not in counter:

    counter[char] = 1

  else:

    counter[char] = counter[char] + 1

print(counter)

"""
{'l': 1, 'i': 2, 'n': 3, 'u': 2, 'x': 2, 'a': 1, 'd': 1, 'r': 1, 'o': 1, 'c': 1, 'k': 1, 's': 1}
"""

возвращает вывод о том, сколько раз эти буквы появились в переменной

myStr = 'linuxandunixrocks'

checkStrs = 'liku'

counter = {}

for char in checkStrs:

  if char in myStr:

    counter[char] = myStr.count(char)


print(counter)

"""
{'l': 1, 'i': 2, 'k': 1, 'u': 2}
"""
0 голосов
/ 05 февраля 2020

Ваш код в настоящее время просто возвращает связанный номер (например, его позицию в алфавите) с каждой буквой в number_counts вместо того, чтобы фактически пытаться что-либо посчитать.

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

def letter_counter(your_string: str):
    counter_dict = {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
    for char in your_string.lower():  # I assume you wish to count lower and uppercase as the same
        if char in counter_dict.keys():  # discards anything not in our dictionary
            counter_dict[char] += 1
    return counter_dict

test = "This is a test!"
print(letter_counter(test))

Вывод:

{'a': 1, 'b': 0, 'c': 0, 'd': 0, 'e': 1, 'f': 0, 'g': 0, 'h': 1, 'i': 2, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 3, 't': 3, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}

С этим вы можете расширить его, чтобы подсчитать другие символы, такие как !, в противном случае они просто игнорируются. Если вы хотите sh для подсчета заглавных букв по отдельности, вам нужно добавить все заглавные буквы к диктату отдельно и удалить .lower() из сценария.

...