我希望我的字典不区分大小写
我有以下示例代码:
text=“练习改变颜色”
单词={'color':'color',
“实践”:“实践”}
def replace(文字、文本):
keys=words.keys()
对于i键:
text=text.replace(i,单词[i])
返回文本
text=替换(单词、文本)
打印文本
输出=练习改变颜色
我想要另一个字符串,“练习更改颜色”,(其中颜色以大写字母开头)也提供相同的输出
我相信有一种通用的方法可以使用
mydictionary[key.lower()]但我不确定如何最好地将其集成到现有代码中。(如果这是一个合理、简单的方法的话)
目前批准的答案不适用于很多案例,因此不能作为替代品使用。获得正确的dict替换时的一些技巧点:
- 重载所有涉及键的方法
- 正确处理非字符串键
- 正确处理类的构造函数
以下几点应能更好地发挥作用:
class CaseInsensitiveDict(dict):
@类方法
def_k(cls,钥匙):
如果isinstance(key,basestring)else key,则返回key.lower()
定义初始化(self,*args,**kwargs):
super(不区分大小写的指令,self)。\uuuuu init\uuuuuu(*args,**kwargs)
self.\u转换\u键()
def _u获取项目(自身,密钥):
返回super(不区分大小写的指令,self)。\uu获取项目\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu类\uuuuuuuuuk(键))
定义设置项(自身、键、值):
super(不区分大小写的指令,self)。\uuuuuu设置项\uuuuuuuuuu(self.\uuuuuu类\uuuuuu.\k(键),值)
def uu delitem uu(self,key):
返回super(不区分大小写,self)。\u delitem\u(self.\u class\u.\u k(键))
def___;包含_______;(自身,密钥):
返回super(不区分大小写的指令,self)。\uuuuu包含\uuuuu(self.\uuuu类\uuuu.\k(键))
def具有_键(自身,键):
return super(不区分大小写,self).has_key(self.\uuuu class.\uuu.\k(key))
def pop(自身、钥匙、*args、**kwargs):
返回super(不区分大小写,self).pop(self.\u class.\u.\u k(键),*args,**kwargs)
def get(自身、键、*args、**kwargs):
return super(不区分大小写,self).get(self.\u class.\u.\u k(键),*args,**kwargs)
def setdefault(自身、键、*args、**kwargs):
返回super(CaseInsensitiveDict,self).setdefault(self.\u class.\u.\u k(键),*args,**kwargs)
def更新(self,E={},**F):
超级(不区分大小写,self).更新(self.\uuuuuu类\uuuuuuuu(E))
超级(不区分大小写的指令,self).更新(self.\uuuuuuu class\uuuuu(**F))
定义转换键(自):
对于列表中的k(self.keys()):
v=super(不区分大小写,self).pop(k)
self.\uuuu设置项(k,v)