JerryB wrote: > Hi, > I have a dictionary, a string, and I'm creating another string, like > this: > > dict = {} > dict[beatles] = "need" > str = "love" > > mystr = """All you %(dict[beatles])s is %(str)s""" % locals() > > Why do I get > keyerror: 'dict[one]'? > > Is there a way to reference the elements in a dictionary with locals() > or do I need to create a temp variable, like > > need = dict[one] > mystr = """All you %(need)s is %(str)s"""
1) Avoid variable names like 'dict' and 'str'- they cover up the builtin names. 2) When showing error, don't retype - cut and paste: >>> dict[beatles] = "need" Traceback (most recent call last): File "<pyshell#6>", line 1, in -toplevel- dict[beatles] = "need" NameError: name 'beatles' is not defined >>> dict['beatles'] = "need" >>> 3) In string formating, the item in parenthesis, used as a string, is the key for the dictionary. That is: """All you %(dict[beatles])s is %(str)s""" % ld is the same as """All you %s is %s""" % (ld['dict[beatles]'],ld['str']) 4) Your best bet is not to use locals(), but to create a new dictionary with the appropriate keys. E.g.: >>> d = {} >>> d['beatles'] = "need" >>> s = "love" >>> d2 = d.copy() >>> d2['str'] = s >>> d['str'] Traceback (most recent call last): File "<pyshell#24>", line 1, in -toplevel- d['str'] KeyError: 'str' >>> d2['str'] 'love' >>> mystr = """All you %(beatles)s is %(str)s""" % d2 >>> print mystr All you need is love -- http://mail.python.org/mailman/listinfo/python-list