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

Reply via email to