In article <[EMAIL PROTECTED]>, Phoe6 <[EMAIL PROTECTED]> wrote:
> I have a requirement for using caseless dict. I searched the web for > many different implementations and found one snippet which was > implemented in minimal and useful way. > > ############# > import UserDict > > class CaseInsensitiveDict(dict, UserDict.DictMixin): > def __init__(self, *args, **kwargs): > self.orig = {} > super(CaseInsensitiveDict, self).__init__(*args, **kwargs) > def items(self): > keys = dict.keys(self) > values = dict.values(self) This items() can't be what anyone would want items to be for a "caseless dict". > return [(self.orig[k],v) for k in keys for v in values] > def __setitem__(self, k, v): > hash_val = hash(k.lower()) > self.orig[hash_val] = k > dict.__setitem__(self, hash_val, v) > def __getitem__(self, k): > return dict.__getitem__(self, hash(k.lower())) > > > obj = CaseInsensitiveDict() > obj['Name'] = 'senthil' > print obj > print obj.items() > > obj1 = {} > obj1['Name'] = 'senthil' > print obj1 > print obj1.items() > ########### > [EMAIL PROTECTED] python]$ python cid1.py > {15034981: 'senthil'} > [('Name', 'senthil')] > {'Name': 'senthil'} > [('Name', 'senthil')] > > --- > The difference between the Caselessdict and {} is that when called as > the object, the Caselessdict() is giving me the internal > representation. > obj = CaseInsensitiveDict() > obj['Name'] = 'senthil' > print obj > gives: {15034981: 'senthil'} > > obj1 = {} > obj1['Name'] = 'senthil' > print obj1 > Correctly gives {'Name': 'senthil'} > > What changes should I make to CaseInsensitiveDict ( written above), so > that its instance gives the actual dictionary instead of its internal > representation. > Constructing a dictionary and returning from __init__ method did not > work. It's not entirely clear to me what you want: Since this is supposed to be a "caseless" dict, I imagine that if you say d['Name'] = 'first value' d['name'] = 'new value' then d['Name'] should now be 'new value'. Fine. Now in that case exactly what do you want to see when you print d? Do you want to see {'name':'new value'} or {'name':'new value', 'Name': 'newvalue'}? > TIA, > Senthil -- David C. Ullrich -- http://mail.python.org/mailman/listinfo/python-list