Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #22195 > unrolled thread

Re: Question about collections.defaultdict

Started by"Steven W. Orr" <steveo@syslang.net>
First post2012-03-26 11:33 -0400
Last post2012-03-26 11:33 -0400
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Question about collections.defaultdict "Steven W. Orr" <steveo@syslang.net> - 2012-03-26 11:33 -0400

#22195 — Re: Question about collections.defaultdict

From"Steven W. Orr" <steveo@syslang.net>
Date2012-03-26 11:33 -0400
SubjectRe: Question about collections.defaultdict
Message-ID<mailman.1007.1332776018.3037.python-list@python.org>
On 3/26/2012 9:44 AM, Robert Kern wrote:
> On 3/26/12 2:33 PM, Steven W. Orr wrote:
>> I created a new class called CaseInsensitiveDict (by stealing from code I found
>> on the web, thank you very much). The new class inherits from dict. It makes it
>> so that if the key has a 'lower' method, it will always access the key using
>> lower
>>
>> I'd like to change the place where I previously declared a dict
>>
>> self.lookup = defaultdict(list)
>>
>> so that the new code will allow this new dict to be used instead. But then I
>> realized I may have painted myself into a small corner:
>>
>> Is there a way to use defaultdict so that I can override what *kind* of dict it
>> will use?
>
> No.
>
>> I would like the value to still be a list be default, but it seems like I can't
>> tell defaultdict to use *my* new dict.
>>
>> Do I give up on defaultdict?
>
> Assuming that your CaseInsensitiveDict subclasses from dict or UserDict, it's
> relatively easy to make a subclass of your CaseInsensitiveDict act like a
> defaultdict. Just implement the __missing__(key) method appropriately (and
> modify the constructor to take the callable, of course).
>
> http://docs.python.org/library/stdtypes.html#dict
> http://docs.python.org/library/collections.html#collections.defaultdict.__missing__
>
>

I'm not quite getting what you're telling me, but I'm sure you have the right 
idea. Here's the beginning of my class:

class CaseInsensitiveDict(dict):
     def __init__(self, init=None):
         if isinstance(init, (dict, list, tuple)):
             for kk, vv in init.items():
                 self[self.key_has_lower(kk)] = vv


It sounds like you want me to subclass defaultdict to create something like this?

class CaseInsensitiveDictDef(defaultdict):
     def __init__(self, init=None):
         super(CaseInsensitiveDictDef, self).__init__(list)
         self.__missing__ = list

I think I'm way off base. I'm not clear on what the calling sequence is for 
defaultdict or how to get it to  use my CaseInsensitiveDict instead of regular 
dict.

Can you help?

-- 
Time flies like the wind. Fruit flies like a banana. Stranger things have  .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web