我有这种情况。
a={'x':'test'}
b="this is a %(a['x'])s
print b % {'test':'testing'}
期望的结果是
>>this is a testing
但它会抛出错误“ValueError:不完整的格式键”
请建议我一个更好的方法。谢谢。
答案 0 :(得分:1)
您可以在插入字符串之前进行交换。
c = { 'test' : 'string' }
y = c[a['x']]
然后只需"mystring %s" % y
如果您不想在使用
之前交换值 ("{0[%s]}" % a['x']).format(c)
答案 1 :(得分:1)
需要再创建一个字典。
>>> a={'x':'test'}
>>> b="this is a %s"
>>> c = {'test':'testing'}
>>> print b % c[a['x']]
this is a testing
答案 2 :(得分:1)
您可以将字典扩展为命名参数
a = {'test': 'testing'}
b = "this is a {test}".format(**a)
print b
输出:this is a testing
字典前面的**
会将参数传递给方法,该方法的名称与键匹配,值与字典中的值匹配。
现在查看您的代码以及您要实现的目标,您正在使用两个词典。所以你需要格式化你的字符串两次。
a={'x':'test'}
b="this is a {{{x}}}".format(**a)
print b
print b.format(**{'test':'testing'})
<强>输出:强>
这是{test}
这是一个测试
第一种格式创建一个新的命名占位符,其值为key x。第二种格式将填充占位符。
答案 3 :(得分:1)
为何显示关键错误
在你的代码中,%(a ['x'])只是将键参数转换为“a ['x']”
这相当于:
a={'x':'test'}
b="this is a %(a['x'])s
print b % {"a['x']":'testing'}
"this is a testing"
您可以使用其他答案建议的格式或%
答案 4 :(得分:0)
您的代码存在的问题比您告诉的更多。该字符串缺少尾随"
,但也不清楚您正在尝试做什么。 a
是什么?
您需要做的是将密钥放在括号中,例如:
b="this is a %(test)s"
或者,如果您希望从x
获取a
,然后展开您,则需要执行以下操作:
b="this is a %%(%(x)s)s" % a
这将扩展a中的x
并导致前一个示例中的字符串。我使用双倍百分比来逃避百分号。
答案 5 :(得分:-1)
如何使用format
:
>>> a = {'x': 'test'}
>>> print("this is a {0[x]}".format(a))
this is a test
如何使用format
:
{!字段convertflag:formatspec}
formatspec:
[[填补]对准] [符号] [#] [0] [宽度] [精度] [类型代码]
我会举一些例子:
>>> import sys
>>> print("I'm using python {0.version}".format(sys))
I'm using python 2.7.9 (default, Mar 31 2015, 09:35:58)
[GCC 4.8.1]
>>> print("Hello, {name}".format(name="lord63"))
Hello, lord63
>>> print("{0}, {1}, {0}".format("one", "two"))
one, two, one
>>> print("The fifth: {0[4]}".format(range(1,6)))
5
>>> print("I'm {0[name]}".format(dict(name="lord63", age=20)))
I'm lord63
答案 6 :(得分:-1)
Python2
如果您想打印this is a testing
,这是一种方法:
a={'x':'test'}
b="this is a %sing" %(a['x'])
print b
输出:
this is a testing