从字典中获取项目的最佳方法是什么?在

时间:2017-12-18 11:23:38

标签: python dictionary

在python词典中获取项目的最快方法是什么?

我试图通过他们输入的密钥向用户提供val。例如:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

因此,如果他们输入Name,该函数将打印Zara

**但如果用户使用大写或小写字母书写,该函数仍然可以返回他要查找的内容。

因此,如果用户输入:Name / NaMe / namE,我的函数仍会返回val Zara

4 个答案:

答案 0 :(得分:1)

这是一个应该有意义的假设 - 没有只有区分大小写的密钥(否则,你的问题将不再有意义)。

您要做的是使用所有小写键创建一个新词典。相应地,在查询时,小写查询键并索引字典。以下是您的工作方式。

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'} 
In [65]: key = 'NaMe'

In [66]: n_dict.get(key.lower())
Out[66]: 'Zara'

作为旁注,请勿使用dict为变量命名,因为dict是内置的名称,您最终会将其隐藏。

答案 1 :(得分:1)

requests包中查看CaseInsensitiveDict

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

一个优点是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

一个缺点是键必须是字符串。另一个是每个密钥只允许一个案例变体(但无论如何这都是笨拙/荒谬的):

>>> CaseInsensitiveDict({'Name': 123, 'name': 456, 'NaMe': 789})
{'NaMe': 789}

答案 2 :(得分:0)

假设你的钥匙都是带有第一个字母的单个单词:

x = userInput.lower()
y = x.title()
print myDict[y] 

答案 3 :(得分:0)

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

data-currency=aud

输出:

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]