Python 是否可以跳过dict中的区分大小写?

Python 是否可以跳过dict中的区分大小写?,python,dictionary,case-sensitive,Python,Dictionary,Case Sensitive,我试过: d = {3:'a',2:'b'} if 'B' in d.values(): print 'True' 对我来说,B等于B,但我不想更改我的字典 是否可以根据字典的值测试不区分大小写的匹配 如何在不更改值的情况下检查字典中是否存在'B' # 更复杂的是: d = {3:'A',2:'B',6:'c'} 您必须循环使用以下值: if any('B' == value.upper() for value in d.itervalues()): print 'Yup'

我试过:

d = {3:'a',2:'b'}

if 'B' in d.values():
    print 'True'
对我来说,
B
等于
B
,但我不想更改我的字典

是否可以根据字典的值测试不区分大小写的匹配

如何在不更改值的情况下检查字典中是否存在
'B'

# 更复杂的是:

d = {3:'A',2:'B',6:'c'}

您必须循环使用以下值:

if any('B' == value.upper() for value in d.itervalues()):
    print 'Yup'
对于Python 3,将
.itervalues()
替换为
.values()
。这测试了最小数量的值;没有创建中间列表,并且
any()
循环在找到匹配项时终止

演示:


您必须循环使用以下值:

if any('B' == value.upper() for value in d.itervalues()):
    print 'Yup'
对于Python 3,将
.itervalues()
替换为
.values()
。这测试了最小数量的值;没有创建中间列表,并且
any()
循环在找到匹配项时终止

演示:

试试这个

import sys

d = {3:'A',2:'B',6:'c'}
letter = (str(sys.argv[1])).lower()

if filter(lambda x : x == letter ,[x.lower() for x in d.itervalues()]):
    print "%s is present" %(letter)
else:
    print "%s is not present" %(letter)
试试这个

import sys

d = {3:'A',2:'B',6:'c'}
letter = (str(sys.argv[1])).lower()

if filter(lambda x : x == letter ,[x.lower() for x in d.itervalues()]):
    print "%s is present" %(letter)
else:
    print "%s is not present" %(letter)

您还可以创建不区分大小写的dict:您还可以创建不区分大小写的dict:最好使用
imap
dict.itervalues()
,因为它返回一个迭代器。@AshwiniChaudhary这更干净,而且在python 3上可以惰性地工作。我怀疑他是否有一个超过1.000.000个值的字典,所以这没什么大不了的:)是的,在py3.x中
map
已经返回了一个迭代器,但在py2.x中它将首先创建一个列表,然后在其中查找
'b'
。相关:最好使用
imap
dict.itervalues()
,因为它返回一个迭代器。@AshwiniChaudhary这更干净,在python 3上可以惰性地工作。我怀疑他是否有一个超过1.000.000个值的字典,所以这没什么大不了的:)是的,在py3.x中
map
已经返回了一个迭代器,但在py2.x中它将首先创建一个列表,然后在其中查找
'b'
。相关:问题是关于不区分大小写的搜索。问题是关于不区分大小写的搜索。
import sys

d = {3:'A',2:'B',6:'c'}
letter = (str(sys.argv[1])).lower()

if filter(lambda x : x == letter ,[x.lower() for x in d.itervalues()]):
    print "%s is present" %(letter)
else:
    print "%s is not present" %(letter)