在Python中提供几个键,从字典中获取项的最佳方法是什么

在Python中提供几个键,从字典中获取项的最佳方法是什么,python,dictionary,Python,Dictionary,在python字典中获取给定键数的项的最快方法是什么 我试图从用户键入的密钥中为用户提供val。例如: dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} 因此,如果他们键入Name,函数将打印Zara **但是,如果用户使用大写或小写字母书写,该函数仍然能够返回他正在查找的内容 因此,如果用户键入:Name/Name/Name,我的函数仍将返回valZara 这里有一个假设应该是有意义的——没有只因区分大小写而不同的键(否则,你的问题就没有

在python字典中获取给定键数的项的最快方法是什么

我试图从用户键入的密钥中为用户提供val。例如:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
因此,如果他们键入
Name
,函数将打印
Zara

**但是,如果用户使用大写或小写字母书写,该函数仍然能够返回他正在查找的内容


因此,如果用户键入:
Name
/
Name
/
Name
,我的函数仍将返回val
Zara

这里有一个假设应该是有意义的——没有只因区分大小写而不同的键(否则,你的问题就没有意义了)

您要做的是创建一个包含所有小写键的新词典。相应地,在查询时,将查询键小写并为字典编制索引。下面是你如何做到这一点的

In [63]: n_dict = {k.lower() : v for k, v in dct.items()}

In [64]: n_dict
Out[64]: {'age': 7, 'class': 'First', 'name': 'Zara'} 

作为旁注,不要使用
dict
来命名变量,因为
dict
是一个内置项的名称,您最终会对其进行阴影处理。

假设您的键都是首字母大写的单字:

x = userInput.lower()
y = x.title()
print myDict[y] 
查看
请求
包中的内容

尽管它位于一个不相关的包中,但您可能已经在项目中使用了它。如果没有,或者您不想要依赖关系(最好避免),您可以复制代码或将其作为您自己实现的灵感

一个优点是
CaseInsensitiveDict
支持常用的字典方法,包括
in
操作符:

from requests.structures import CaseInsensitiveDict

d = CaseInsensitiveDict({'Name': 'Zara', 'Age': 7, 'Class': 'First'})

>>> d.get('NAME')
'Zara'
>>> d.get('name')
'Zara'
>>> d['NaMe']
'Zara'
>>> d['NoName']
Traceback (most recent call last):
...
KeyError: 'noname'
>>> 'NoName' in d
False
>>> 'Name' in d
True
>>> 'NAME' in d
True
等等

一个缺点是键必须是字符串。另一个是每个键只允许有一个case变量(但这很尴尬/荒谬):


另一种选择是使用正则表达式:

import re
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
key = "naMe"
new_data = [b for a, b in dict.items() if re.findall('^{}$'.format(key), a, re.IGNORECASE)][0]
输出:

'Zara'

您的意思可能是
名称
/
名称
/
名称
?此外,请不要命名变量
列表
dict
等。它会覆盖对
dict
类的引用。如果dict同时包含(例如)一个“name”和一个“name”键,该怎么办?如果您的问题得到了回答,请单击旁边的灰色复选框并将其切换为绿色。谢谢为什么要将
x
小写,然后调用
title
?此外,这是无效语法。小写x只是一个示例变量名。是的,我查字典的方式是错误的语法,我修正了它。首先用.lower()使整个字符串小写,然后用.title()使字符串中每个单词的第一个字母大写,好吧,但我的意思是你不需要先将它小写。我尝试过将用户输入改为lower,upper,title,但在最坏的情况下,它的复杂性是o(n^3)。。让我们换一种方式来问这个问题。。通过为列表或其他对象提供键来获取所有值。。。。。。假设我想进入:ls=getItem(key1,key2,key3),我将获得所有这些项目,但我的字典有一些键,例如:@user5890682,像什么?谢谢你的回答,但在我的情况下,它更复杂,我只为我的Q给出了一个例子,你能帮我找到解决问题的方法吗?@user5890682我会尽量弄清楚的。如果您的示例没有准确地再现您的实际数据,那么您不应该将其用作示例?不如解释一下为什么这样不行,这样我就可以根据需要修改/修正我的答案了。@user5890682你的问题并没有真正解释如何做到这一点。也许你应该在你的问题中更明确地说明你到底想要什么。到目前为止,这回答了你当前的问题。真的吗?您想在字典中使用正则表达式和循环吗?
import re
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
key = "naMe"
new_data = [b for a, b in dict.items() if re.findall('^{}$'.format(key), a, re.IGNORECASE)][0]
'Zara'