Printing formatted strings from a dictionary

Michael Hudson mwh at python.net
Thu May 13 07:57:00 EDT 2004


tkpmep at hotmail.com (Thomas Philips) writes:

> I want to print "1 spam 4 you" using a formatted string that gets its 
> inputs from the dictionary d={'n1':1, 's1':'spam', 'n2':4}. To do so,
> I write
> 
> >>> x="%('n1')d %('s1')s %('n2')d you"
> >>> x % d
> 
> Traceback (most recent call last):
>   File "<pyshell#22>", line 1, in -toplevel-
>     x % d
> KeyError: "'n1'"
> >>> 
> 
> However, I get what I want if I edit x to remove the quotes around n1,
> s1 and n2 and write
> >>> x="%(n1)d %(s1)s %(n2)d you"
> >>> x % d
> '1 spam 4 you'
> 
> The syntax that works seems to run counter to the way dictionaries
> work:
> >>> d['n1']
> 1
> >>> d[n1]
> 
> Traceback (most recent call last):
>   File "<pyshell#18>", line 1, in -toplevel-
>     d[n1]
> NameError: name 'n1' is not defined
> 
> What is the error in my logic?

Um.  If the n1 is already inside a string literal, adding more quotes
would be redundant?

CHeers,
mwh

-- 
  A difference which makes no difference is no difference at all.
                        -- William James (I think.  Reference anyone?)



More information about the Python-list mailing list