不区分大小写的全名字典搜索

Mou*_*nir 3 python dictionary

我正在为许多人创建一个带有“全名”:“生日”的字典作为练习。程序应该问“你想查询谁的生日?” 我会输入一个名字,比如“本杰明富兰克林”,它会返回他的生日: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)

Hyp*_*ino 6

最好的方法是将字典中的键保持小写。如果由于某种原因您不能这样做,请使用从小写到真正键的字典,然后保留原始字典。

否则,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)

  • 人们还可以使用诸如“name_dict = {s.lower() : s for s in bday_dict}”之类的东西来预先生成第二个字典。 (3认同)