python字符串格式与关键字参数

时间:2015-06-18 12:27:24

标签: python

我有这种情况。

a={'x':'test'}
b="this is a %(a['x'])s
print b % {'test':'testing'}

期望的结果是

>>this is a testing

但它会抛出错误“ValueError:不完整的格式键”

请建议我一个更好的方法。谢谢。

7 个答案:

答案 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