expanding a variable to a dict

I

idle

I've got a variable in a loop that I'm trying to expand/translate/
readdress as an existing dict so as to add some keys into it..

eg; I have a set of existing dicts: dictFoo, dictBar, dictFrotz (names
changed to protect the innocent)

now I'd like to check them all for the existence of certain default
keys; ie, if the dicts don't contain the keys, add them in with
default values.

so, I've got:

for a in ['dictFoo','dictBar','dictFrotz']:
if hasattr(a,'srcdir') == False:
a['srcdir']='/usr/src'

the error I get (which I expect) is 'str' object doesn't support item
assignment.

what incantation do I cast on 'a' to make the interpreter parse it as
'dictFoo' on the first iteration, 'dictBar' on the second, and so
forth?

and/or less importantly, what is such a transformation called, to help
me target my searching?

thanks
 
A

Arnaud Delobelle

I've got a variable in a loop that I'm trying to expand/translate/
readdress as an existing dict so as to add some keys into it..

eg; I have a set of existing dicts: dictFoo, dictBar, dictFrotz (names
changed to protect the innocent)

now I'd like to check them all for the existence of certain default
keys; ie, if the dicts don't contain the keys, add them in with
default values.

so, I've got:

for a in ['dictFoo','dictBar','dictFrotz']:
    if hasattr(a,'srcdir') == False:
        a['srcdir']='/usr/src'

the error I get (which I expect) is 'str' object doesn't support item
assignment.

what incantation do I cast on 'a' to make the interpreter parse it as
'dictFoo' on the first iteration, 'dictBar' on the second, and so
forth?

and/or less importantly, what is such a transformation called, to help
me target my searching?

thanks

You want a to iterate through the dictionary *objects*, not *names*,
so write

for a in [dictFoo, dictBar, dictFrotz]:
...

BTW, hasattr() is not what you want as it check the existence of an
attribute, i.e. a.hasattr('x') means that a.x exists; you could write
the whole thing as:

for a in dictFoo, dictBar, dictFrotz:
if 'srcdir' not in a:
a['srcdir'] = '/usr/src'

Or more concisely:

for a in ... :
a.setdefault('srcdir', '/usr/src')


For more information, help(dict) is your friend :)

HTH
 
G

Gary Herron

idle said:
I've got a variable in a loop that I'm trying to expand/translate/
readdress as an existing dict so as to add some keys into it..

eg; I have a set of existing dicts: dictFoo, dictBar, dictFrotz (names
changed to protect the innocent)

now I'd like to check them all for the existence of certain default
keys; ie, if the dicts don't contain the keys, add them in with
default values.

so, I've got:

for a in ['dictFoo','dictBar','dictFrotz']:
if hasattr(a,'srcdir') == False:
a['srcdir']='/usr/src'

the error I get (which I expect) is 'str' object doesn't support item
assignment.

what incantation do I cast on 'a' to make the interpreter parse it as
'dictFoo' on the first iteration, 'dictBar' on the second, and so
forth?

and/or less importantly, what is such a transformation called, to help
me target my searching?

thanks

Try this:

for a in [dictFoo, dictBar, dictFrotz]:
if 'srcdir' in a:
a['srcdir']='/usr/src'

Gary Herron
 
J

John Machin

I've got a variable in a loop that I'm trying to expand/translate/
readdress as an existing dict so as to add some keys into it..

eg; I have a set of existing dicts: dictFoo, dictBar, dictFrotz (names
changed to protect the innocent)

now I'd like to check them all for the existence of certain default
keys; ie, if the dicts don't contain the keys, add them in with
default values.

so, I've got:

for a in ['dictFoo','dictBar','dictFrotz']:
if hasattr(a,'srcdir') == False:
a['srcdir']='/usr/src'

the error I get (which I expect) is 'str' object doesn't support item
assignment.

what incantation do I cast on 'a' to make the interpreter parse it as
'dictFoo' on the first iteration, 'dictBar' on the second, and so
forth?

and/or less importantly, what is such a transformation called, to help
me target my searching?

It's called "deleting extraneous apostrophes from source code".

Happy googling!
 
M

Max M

idle skrev:
now I'd like to check them all for the existence of certain default
keys; ie, if the dicts don't contain the keys, add them in with
default values.

so, I've got:

for a in ['dictFoo','dictBar','dictFrotz']:
if hasattr(a,'srcdir') == False:
a['srcdir']='/usr/src'

There are a few ways to do it.

for a in ['dictFoo','dictBar','dictFrotz']:
if not a.has_key('srcdir'):
a['srcdir'] = '/usr/src'

for a in ['dictFoo','dictBar','dictFrotz']:
if not 'srcdir' in a:
a['srcdir'] = '/usr/src'

for a in ['dictFoo','dictBar','dictFrotz']:
a.setdefault('srcdir') = '/usr/src'


--

hilsen/regards Max M, Denmark

http://www.mxm.dk/
IT's Mad Science
 
J

John Machin

idle skrev:
now I'd like to check them all for the existence of certain default
keys; ie, if the dicts don't contain the keys, add them in with
default values.
so, I've got:
for a in ['dictFoo','dictBar','dictFrotz']:
if hasattr(a,'srcdir') == False:
a['srcdir']='/usr/src'

There are a few ways to do it.

for a in ['dictFoo','dictBar','dictFrotz']:

Ummm ... excessive apostrophes plus bonus gross syntax error, dood.
Did you try running any of these snippets???
if not a.has_key('srcdir'):

a is a str object. Bang.

a['srcdir'] = '/usr/src'

for a in ['dictFoo','dictBar','dictFrotz']:
if not 'srcdir' in a:
a['srcdir'] = '/usr/src'

a is a str object. Bang.
for a in ['dictFoo','dictBar','dictFrotz']:
a.setdefault('srcdir') = '/usr/src'

SyntaxError: can't assign to function call
--

hilsen/regards Max M, Denmark

http://www.mxm.dk/
IT's Mad Science

Sure is.
 
M

Max M

John Machin skrev:
Ummm ... excessive apostrophes plus bonus gross syntax error, dood.
Did you try running any of these snippets???

No I just wanted to quickly show different ways to do it.

The dicts in the original question wasn't dicts either. So I asumed I
could answer in the same vein.



Oh yes. That will motivate further answers.


--

hilsen/regards Max M, Denmark

http://www.mxm.dk/
IT's Mad Science
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top