我必须像这样构建一个字符串
{ name: "john", url: "www.dkd.com", email: "john@fkj.com" }
其中john,www.dkd.com和john@fkj.com将由变量提供
我尝试了以下
s1 = "{'name:' {0},'url:' {1},'emailid:' {2}}"
s1.format("john","www.dkd.com","john@fkj.com")
我收到以下错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "'name"
不能理解我做错了什么
答案 0 :(得分:2)
你需要通过加倍{
和}
来逃避:
s1 = "{{'name:' {0},'url:' {1},'emailid:' {2}}}"
print s1.format("john","www.dkd.com","john@fkj.com")
答案 1 :(得分:2)
看起来你正在尝试构建(格式错误的)JSON或者只是构建一个字典字符串的奇怪方式......
d = {'name': 'bob', 'email': 'whatever', 'x': 'y'}
print str(d)
或者:
import json
print json.dumps (d)
答案 2 :(得分:1)
你可以使用字符串格式,这应该可以正常工作..
s1 = "{'name:' '%s','url:' '%s','emailid:' '%s'}" % ("john","www.dkd.com","john@fkj.com")
答案 3 :(得分:1)
发生此错误是因为您没有转义起始大括号,然后由format()
解释为named field
如Format String Syntax文档中所述:
如果您需要在文字文本中包含大括号字符,可以通过加倍{{和}}来对其进行转义。
所以:
s1 = "{{'name:' {0},'url:' {1},'emailid:' {2}}}"
print s1.format("john","www.dkd.com","john@fkj.com")
将输出:
"{'name:' john,'url:' www.dkd.com,'emailid:' john@fkj.com}"
答案 4 :(得分:1)
根据您的要求格式,这应该有效:
>>> s1 = "{name: '%s',url: '%s',emailid: '%s'}" % ("john","www.dkd.com","john@fkj.com")
>>> s1
"{name: 'john',url: 'www.dkd.com',emailid: 'john@fkj.com'}"
答案 5 :(得分:0)
或者你可以简单地这样做:
print '''{ name: "''' + name + '''", url: "''' + url + '''", email: "''' + email + '''" }'''
这是工作解决方案http://ideone.com/C65HnB