从字典中获取键名
Getting a name of a key from a dictionary
我目前正在学习 python,我正在努力解决一个问题,我需要从用户输入一个名称并获取名称的第一个字母,并根据字母告诉他需要一周中的哪一天去(上下文无关紧要),所以:
周一:A - C;周二:D - G;星期三:H-L;星期四:男;周五:N-Q;周六:R - S;周日:T - Z.
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])
我认为就像在 c# 中一样,例如 for 中的“字母”,它实际上就像 i++ 一样,它算作一个数字,但实际上,python 本身知道什么时候我们说“对于 tuple_letter 中的字母”我实际上指的是列表“tuple_letter”中的列表,所以它不起作用,因为我的逻辑基于我会使用的事实它指的是每个列表的元素,因为我把每个列表的每个元素都按相同的顺序排列(星期一和 'a'、'b'、'c' == 1,.... )
为了总结和连接标题,我想到了一个想法,我会创建一个字典,其中每个键都是字母列表的一周中的相应日期,就像我尝试过的那样。
那么,我该怎么做呢?是否可以?更好的方法?
可以,这可能更符合逻辑。在 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)
- 使用内置函数制作字典,同时更加关注键值对
- 您可以输入大写或小写,因为在比较过程中它先变成小写再比较
字典的工作原理是让键与值相对应,因此如果您执行 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)
和 copy-and-pasting 结果。
但事实证明还有另一种方法 - 您可以对字符串使用不等式(以及列表,但这并不重要)。
按字母顺序排列靠后的字符串较大,而靠前的字符串较小。 "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 在这个 post 上的回答回答了你关于拥有一个以天为键、以字母列表为值的字典的问题。我认为我的速度更快,尽管它没有按照您预期的方向发展。
P.S。我不确定你是不是真的指星期六 R-S;周日:T-Z - 您的示例代码和问题有冲突。
你遗漏了两点:
- 列表索引必须是整数
-
- 添加初始参数如
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
我目前正在学习 python,我正在努力解决一个问题,我需要从用户输入一个名称并获取名称的第一个字母,并根据字母告诉他需要一周中的哪一天去(上下文无关紧要),所以: 周一:A - C;周二:D - G;星期三:H-L;星期四:男;周五:N-Q;周六:R - S;周日:T - Z.
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])
我认为就像在 c# 中一样,例如 for 中的“字母”,它实际上就像 i++ 一样,它算作一个数字,但实际上,python 本身知道什么时候我们说“对于 tuple_letter 中的字母”我实际上指的是列表“tuple_letter”中的列表,所以它不起作用,因为我的逻辑基于我会使用的事实它指的是每个列表的元素,因为我把每个列表的每个元素都按相同的顺序排列(星期一和 'a'、'b'、'c' == 1,.... )
为了总结和连接标题,我想到了一个想法,我会创建一个字典,其中每个键都是字母列表的一周中的相应日期,就像我尝试过的那样。 那么,我该怎么做呢?是否可以?更好的方法?
可以,这可能更符合逻辑。在 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)
- 使用内置函数制作字典,同时更加关注键值对
- 您可以输入大写或小写,因为在比较过程中它先变成小写再比较
字典的工作原理是让键与值相对应,因此如果您执行 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)
和 copy-and-pasting 结果。
但事实证明还有另一种方法 - 您可以对字符串使用不等式(以及列表,但这并不重要)。
按字母顺序排列靠后的字符串较大,而靠前的字符串较小。 "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 在这个 post 上的回答回答了你关于拥有一个以天为键、以字母列表为值的字典的问题。我认为我的速度更快,尽管它没有按照您预期的方向发展。
P.S。我不确定你是不是真的指星期六 R-S;周日:T-Z - 您的示例代码和问题有冲突。
你遗漏了两点:
- 列表索引必须是整数
-
- 添加初始参数如
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