Concise idiom to initialize dictionaries

Pekka Niiranen pekka.niiranen at wlanmail.com
Tue Nov 9 12:27:14 EST 2004


Hi,

You do not need to initialise dictionaries, if you
access them with idiom:

 >>> mydict = {"pekka":1}
 >>> mydict.get("pekka", "")
1
 >>> mydict.get("james", "")
''

-pekka-

Brian Quinlan wrote:
> 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?
> 
> 
> The locals dictionary should be considered read-only. Wouldn't having a 
> list of dictionaries be a better strategy?
> 
> Cheers,
> Brian



More information about the Python-list mailing list