Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > caseless dict - questions

Reply
Thread Tools

caseless dict - questions

 
 
Phoe6
Guest
Posts: n/a
 
      07-05-2008
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)
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()
###########
[ors@goofy 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.

TIA,
Senthil


 
Reply With Quote
 
 
 
 
Jeff
Guest
Posts: n/a
 
      07-08-2008
Use the __str__ and __unicode__ methods to control the printed
representation of a class.
 
Reply With Quote
 
 
 
 
oj
Guest
Posts: n/a
 
      07-08-2008
On Jul 5, 1:57*am, Phoe6 <(E-Mail Removed)> 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)
> * * * * 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()
> ###########
> [ors@goofy 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.
>
> TIA,
> Senthil


What I think you need to do, is define a __repr__(self) method (see
http://docs.python.org/ref/customization.html)

Something like:

def __repr__(self):
return dict(self.items())

I /think/ will work. I haven't tested it though. This isn't exactly
what repr is supposed to do - evaling it won't give you the correct
object back. Defining __str__ might be a better approach.

-Oli
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
caseless dictionary howto ? Stef Mientki Python 12 06-20-2007 06:15 PM
dict.items() vs dict.iteritems and similar questions Drew Python 19 03-15-2007 09:23 PM
dict!ident as equivalent of dict["ident"] Alexander Kozlovsky Python 5 05-22-2006 08:06 AM
[ANN] Pythonutils updates - approx, approxClientproxy, caseless etc Fuzzyman Python 0 03-10-2005 10:34 AM
Re: dict->XML->dict? Or, passing small hashes through text? Skip Montanaro Python 0 08-15-2003 03:46 PM



Advertisments