我正在为许多人创建一个带有“全名”:“生日”的字典作为练习。程序应该问“你想查询谁的生日?” 我会输入一个名字,比如“本杰明富兰克林”,它会返回他的生日:1706/01/17。
好的,我遇到的问题是名称大写。如何输入“本杰明·富兰克林”并在我的字典中仍然找到“本杰明·富兰克林”?我熟悉 .lower() 和 .upper() 函数,但是我无法正确实现它们,这是解决这个问题的正确方法吗?
这是我所拥有的
bday_dict = {"Person1": "YYYY/MM/DD1",
"Person2": "YYYY/MM/DD2",
"Benjamin Franklin": "1706/01/17"}
def get_name(dict_name):
name = input("Who's birthday do you want to look up? > ")
return name
def find_bday(name):
print(bday_dict[name])
find_bday(get_name(bday_dict))
Run Code Online (Sandbox Code Playgroud)
最好的方法是将字典中的键保持小写。如果由于某种原因您不能这样做,请使用从小写到真正键的字典,然后保留原始字典。
否则,Kraigolas 的解决方案效果很好,但它是 O(N) 而哈希图应该是恒定时间的,因此对于非常大的字典,另一个答案将无法扩展。
因此,当您设置密钥时,请执行bday_dict[name.lower()] = value
然后您可以通过bday_dict[input.lower()]
.
或者:
bday_dict = {"John": 1}
name_dict = {"john": "John"}
def access(x):
return bday_dict[name_dict[x.lower()]]
Run Code Online (Sandbox Code Playgroud)