Как создать словарь из существующего списка? Значение ключа должно быть количеством повторений для этого ключа - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь создать программу "наиболее нужная буква", которая принимает строку в качестве входных данных, а вывод должен быть самой повторяющейся буквой в этой строке. В настоящее время я не могу понять, как создать словарь (например, dict.items():[("a", 2), ("b", 5)...]).

def checkio(text: str) -> str:

    input_text = text
    lowercase_input = str.lower(input_text)
    x = list('')
    for i in lowercase_input:
        x.append(i)

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Без импорта вы можете использовать обычный словарь.

def checkio(text: str) -> str:
    lowercase_input = text.lower()
    x = {}
    for i in lowercase_input:
        x[i] = x.get(i, 0) + 1
    return max(x.items(), key=lambda x: x[1])

key, value = checkio('asdafsasaaaa')  # ('a', 7)

Объяснение

dict.get имеет необязательный второй параметр, который мы устанавливаем в 0. Это означает, что если ключ не существует в словаре, x.get(i, 0) вернет 0. max имеет необязательный параметр key, который принимает анонимную (lambda) функцию. Поскольку dict.items() возвращает итерацию из (key, value) пар, мы можем вычислить максимум, посмотрев на компонент value (1-й индекс).

Производительность

Это неэффективно по сравнению с Counter + most_common, как , показанное @ abc . В частности, most_common использует heapq, чтобы уменьшить сложность времени. См. Также Коллекции Python. Основатель: самая общая сложность .

0 голосов
/ 09 сентября 2018

Вы можете использовать collection.Counter , чтобы сделать это напрямую.
Рассмотрим следующий пример.

from collections import Counter

s = "example"
c = Counter(s)
# Counter({'e': 2, 'x': 1, 'a': 1, 'm': 1, 'p': 1, 'l': 1})

Вы также можете получить наиболее распространенное письмо с

c.most_common(1) #[('e', 2)]

Обратите внимание, что в случае, если ввод является предложением, вы можете избежать пробелов, и в этом случае вы можете сделать что-то вроде s = str.join("",s.split()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...