Получение имени ключа из словаря

В настоящее время я изучаю python, и я борюсь с проблемой, в которой мне нужно получить имя в качестве ввода от пользователя и получить первую букву имени и, в зависимости от буквы, сказать ему, в какой день недели ему нужно go (контекст не имеет значения), поэтому: Понедельник: А - С; вторник: Д - Г; Среда: Ч - Л; Четверг: М; пятница: N - Q; Суббота: Р - С; Воскресенье: Т - Я.

tuple_letter = (['a', 'b', 'c'], ['d', 'e', 'f', 'g'], ['h', 'i', 'j', 'k', 'l'], ['m'], ['n', 'o', 'p', 'q'], ['r', 's', 't'], ['u', 'v', 'w', 'x', 'y', 'z'])
tuple_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 

name = input("Name: \n")
for letters in tuple_letter:
    if letters.count(name[0]) >= 1:
         print(name + ", you should go to the hospital on " + tuple_week[letters])

Я думал, что так же, как в С#, например, «буквы» внутри for, на самом деле он будет действовать как i++, что он будет считаться числом, но на самом деле сам python знает, что когда мы говорим «для букв в tuple_letter», я на самом деле я ссылаюсь на списки внутри списка «tuple_letter», поэтому он не работает, поскольку я основывал свою логику на том факте, что я буду использовать его для ссылки на элемент каждого списка, потому что я помещаю каждый элемент каждого список в том же порядке (понедельник и 'a', 'b', 'c' == 1, ....)

В заключение и в связи с заголовком у меня возникла идея создать словарь, в котором каждый ключ будет соответствовать дню недели для списка букв, как я пытался. Итак, как я могу это сделать? Является ли это возможным? Лучшие способы?

Вы имеете в виду, что если я введу «Кара», печатное утверждение должно быть «Кара, вы должны пойти в больницу в среду»?

ewong 11.05.2022 03:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
48
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете, это может иметь немного более логичный смысл. Работа со словарями в Python может быть простой, поскольку они соответствуют стандартам JSON. Обязательное чтение здесь: https://www.w3schools.com/python/python_dictionaries.asp

В вашем примере будет использоваться такой словарь:

example_dict = {
    "Monday": ['a', 'b', 'c'],
    "Tuesday": ['d', 'e', 'f', 'g'],
    "Wednesday": ['h', 'i', 'j', 'k', 'l'],
    "Thursday": ['m'],
    "Friday": ['n', 'o', 'p', 'q'],
    "Saturday": ['r', 's', 't'],
    "Sunday": ['u', 'v', 'w', 'x', 'y', 'z']
}

Оттуда вы можете выполнять итерацию с помощью цикла for и следовать поиску индекса с помощью чего-то вроде example_dict[x]. Вот вторая часть вашего кода, преобразованная, чтобы показать это:

name = input("Name: \n")

if len(name) > 0:
    for i in example_dict:
        # Lower case the letter for comparison
        if name[0].lower() in example_dict[i]:
            print(name + ", you should go to the hospital on " + i)

Вы можете хранить списки в словарях! Итак, после того, как вы повторили значения, нужно просто проверить, какой день содержит букву имени, которое вы анализируете.

Я надеюсь, что это поможет вам начать работу.

tuple_letter = (['a', 'b', 'c'], ['d', 'e', 'f', 'g'], ['h', 'i', 'j', 'k', 'l'], ['m'], ['n', 'o', 'p', 'q'], ['r', 's', 't'], ['u', 'v', 'w', 'x', 'y', 'z'])
tuple_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 
dictionary = dict(zip(tuple_week, tuple_letter))
print(dictionary)
name = input("Name: \n")
for key, value in dictionary.items():
  if name.lower()[0] in value:
    print(name.capitalize() , ", you should go to the hospital on " , key)
  1. Сделайте Dict, используя встроенную функцию, а также уделите больше внимания паре ключ-значение.
  2. Вы можете вводить либо в верхнем регистре, либо в нижнем регистре, потому что во время сравнения он делает нижний регистр, а затем сравнивает

Словари работают, имея ключи, соответствующие значениям, поэтому, если вы делаете dict[key] или dict.get(key), вы получаете значение.

Проблема в том, что с вашим сценарием кодирование немного повторяется.

letter_to_day = {
    'a':"Monday",
    'b':"Monday",
    'c':"Monday",
    'd':"Tuesday",
    ... # fair amount of typing
    'z':"Sunday"
}
name = input("Name: \n")

print(name + ", you should go to the hospital on " + letter_to_day[name[0].lower()])
#raises an error if it isn't a letter

print(name + ", you should go to the hospital on " + letter_to_day.get(name[0].lower(), "not a letter"))
#this one will return "not a letter" if it isn't found

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

letter_to_day = {}
for day in tuple_week:
    for letters in tuple_letter:
        for letter in letters:
            letter_to_day[letter] = day

вместо того, чтобы вводить все это или даже делать print(letter_to_day) и копировать и вставлять результат.

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

Строки позже в алфавитном порядке больше, а строки раньше меньше. "a" < "b" есть True.

Это означает, что вы можете сделать что-то вроде

def letter_to_day(letter):
    if "a" <= letter <= "c":
        return "Monday"
    elif "d" <= letter <= "g":
        return "Tuesday"
    elif "h" <= letter <= "l":
        return "Wednesday"
    elif letter == "m":
        return "Thursday"
    elif "n" <= letter <= "q":
        return "Friday"
    elif "r" <= letter <= "s":
        return "Saturday"
    elif "t" <= letter <= "z":
        return "Sunday"
    else:
        return "not a letter"

name = input("Name: \n")
print(name + ", you should go to the hospital on " + letter_to_day(name[0].lower()))

Ответ на этот пост от iamwbj отвечает на ваш вопрос о словаре, в котором дни являются ключами, а списки букв - значениями. Я думаю, что мой быстрее, хотя он идет не в том направлении, в котором вы ожидали.

P.S. Я не был уверен, действительно ли вы имели в виду субботу R-S; Воскресенье: TZ - ваш пример кода и вопрос противоречат друг другу.

Вам не хватает двух моментов:

  • индекс списка должен быть целым числом
    • добавьте начальный параметр, например i, чтобы представить индекс
    • используйте break, чтобы выйти из цикла for во время проверки
  • имя должно быть изменено на нижний регистр
    • добавьте lower(), чтобы преобразовать name[0]
tuple_letter = (['a', 'b', 'c'], ['d', 'e', 'f', 'g'], ['h', 'i', 'j', 'k', 'l'], ['m'], ['n', 'o', 'p', 'q'], ['r', 's', 't'], ['u', 'v', 'w', 'x', 'y', 'z'])
tuple_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 

name = input("Name: \n")
i = 0
for letters in tuple_letter:
    if letters.count(name[0].lower()) >= 1:
         print(name + ", you should go to the hospital on " + tuple_week[i])
         break
    i += 1

Другие вопросы по теме