Path: blob/master/languages/python/design_caseinsensitivedict.py
1240 views
#!/usr/bin/python1# $Id$23"""4Case Insenstive Dictionary Lookup. Dictionary keys are case sensitive. However5you might want some facilities to do a case-insenstive dictiionary lookup at6times. This provides the facility for the same.7"""89class CaseInsensitiveDict(dict):10def __init__(self, *args, **kwargs):11self._keystore = {}12d = dict(*args, **kwargs)13for k in list(d.keys()):14self._keystore[self._get_lower(k)] = k15return super(CaseInsensitiveDict,self).__init__(*args,**kwargs)1617def __setitem__(self, k, v):18self._keystore[self._get_lower(k)] = k19return super(CaseInsensitiveDict, self).__setitem__(k, v)2021def __getitem__(self, k):22return super(CaseInsensitiveDict,23self).__getitem__(self._keystore[self._get_lower(k)])24@staticmethod25def _get_lower(k):26if isinstance(k,str):27return k.lower()28else:29return k3031def test():32obj = CaseInsensitiveDict([('name','senthil')])33print(obj)34obj['Sname']='kumaran'35obj['spam'] ='eggs'36obj['SPAM']='ham'37print(list(obj.items()))38obj1 = dict(fname='FIRST')39obj.update(obj1)40print(obj)41print(list(obj.keys()))42print(list(obj.items()))43print(obj['NAME'])44print(obj['SNAME'])4546if __name__ == '__main__':47test()484950