Concise idiom to initialize dictionaries
Larry Bates
lbates at syscononline.com
Tue Nov 9 12:30:07 EST 2004
It is almost certain that you should use either a list of dictionaries
or a dictionary containing other dictionaries for this. Creation of
26 distinct dictionaries is almost never a good solution as it makes
it nearly impossible to iterate over them and would make code to
manipulate them unable to be generalized easily.
Example:
#
# To create a list of dictionaries
#
list_of_dicts=[]
for i in range(26):
list_of_dicts.append({})
#
# Now you can reference each dictionary as:
#
# list_of_dicts[0], list_of_dicts[1], ...
#
or
import string
dict_of_dicts={}
for letter in string.ascii_lowercase:
dict_of_dicts[letter]={}
#
# Now you can reference each dictionary as:
#
# dict_of_dicts['a'], dict_of_dicts['b'], ...
Larry Bates
Frohnhofer, James wrote:
> My initial problem was to initialize a bunch of dictionaries at the start of a
> function.
>
> I did not want to do
> def fn():
> a = {}
> b = {}
> c = {}
> . . .
> z = {}
> simply because it was ugly and wasted screen space.
>
> First I tried:
>
> for x in (a,b,c,d,e,f,g): x = {}
>
> which didn't work (but frankly I didn't really expect it to.)
> Then I tried:
>
> for x in ('a','b','c','d','e','f','g'): locals()[x]={}
>
> which did what I wanted, in the interpreter. When I put it inside a function,
> it doesn't seem to work. If I print locals() from inside the function, I can
> see them, and they appear to be fine, but the first time I try to access one
> of them I get a "NameError: global name 'a' is not defined"
>
> Now obviously I could easily avoid this problem by just initializing each
> dictionary, but is there something wrong about my understanding of locals,
> that my function isn't behaving the way I expect?
>
>
>
>
>>-----Original Message-----
>>From: python-list-bounces+james.frohnhofer=csfb.com at python.org
>>[mailto:python-list-bounces+james.frohnhofer=csfb.com at python.org]On
>>Behalf Of Dennis Lee Bieber
>>Sent: Tuesday, November 09, 2004 10:31 AM
>>To: python-list at python.org
>>Subject: Re: Determining combination of bits
>>
>>
>>On Mon, 8 Nov 2004 21:18:36 -0800, "news.west.cox.net"
>><sean.berry2 at cox.net> declaimed the following in comp.lang.python:
>>
>>
>>>>Note: 2^1 = 2, so your dictionary is already in error...
>>>>
>>>
>>>The dictionary was filled with arbitrary values, not
>>>{ x : 2^x } values like you might have thought.
>>
>> Well, you had stated "powers of two"... If all you wanted is a
>>bit mapping you could probably drop the dictionary and just use a list
>>of the values, indexed by the bit position, and my first attempt
>>logic...
>>
>>
>>>It is actually more like {1:123, 2:664, 4:323, 8:990, 16:221... etc}
>>>
>>>
>>
>>CheckBoxes = [ "FirstChoice",
>> "SecondChoice",
>> "ThirdChoice",
>> "FourthChoice",
>> "FifthChoice",
>> "SixthChoice" ]
>>
>>
>>for num in [22, 25, 9]:
>> bit = 0
>> while num:
>> if num & 1:
>> print CheckBoxes[bit],
>> bit = bit + 1
>> num = num >> 1
>> print
>>
>>SecondChoice ThirdChoice FifthChoice
>>FirstChoice FourthChoice FifthChoice
>>FirstChoice FourthChoice
>>
>>where "num" is the sum of the checkbox index values (or whatever
>>selection mechanism is used), assuming /they/ were set up in 2^(n+1)
>>scheme (n = bit position, starting with 0)...
>>
>>--
>> > ============================================================== <
>> > wlfraed at ix.netcom.com | Wulfraed Dennis Lee Bieber KD6MOG <
>> > wulfraed at dm.net | Bestiaria Support Staff <
>> > ============================================================== <
>> > Home Page: <http://www.dm.net/~wulfraed/> <
>> > Overflow Page: <http://wlfraed.home.netcom.com/> <
>>--
>>http://mail.python.org/mailman/listinfo/python-list
>>
>
>
> ==============================================================================
> This message is for the sole use of the intended recipient. If you received
> this message in error please delete it and notify us. If this message was
> misdirected, CSFB does not waive any confidentiality or privilege. CSFB
> retains and monitors electronic communications sent through its network.
> Instructions transmitted over this system are not binding on CSFB until they
> are confirmed by us. Message transmission is not guaranteed to be secure.
> ==============================================================================
>
More information about the Python-list
mailing list