2013-03-01 103 views
0

是否可以在不知道顺序的情况下将变量值插入到字符串中?
我熟悉Python:将变量插入到没有顺序的字符串中

"% world" % "Hello" 

语法,但有什么比得上

string = "Order id %{order.id}, price: %price" % (price, order) 

我这么问是因为我想有不一致的使用变量字符串列表,以及它们的位置,我想用一个函数来代替它们。

+0

可能在此躺在附近的某个地方的欺骗,但链接的欺骗不考虑的情况下,字符串中的属性访问。 '“{order.id}”。format(order = ...)' – mgilson 2013-03-01 02:01:47

+0

你是对的;它有点类似,答案有所涵盖,但我从来没有遇到过这个问题,因为这个问题的措辞不同。 – Mikhail 2013-03-01 03:54:20

回答

4

您可以使用.format

>>> class order(object) : pass 
... 
>>> a = order() 
>>> a.id=3 
>>> "{order.id}".format(order=a) 
'3' 
>>> "{order.id} and then a {foo} hit the {baz} ".format(baz="fan",foo="rocket",order=a) 
'3 and then a rocket hit the fan ' 

这使用关键字参数,其本质上是无序的。

+0

+1。这实际上是现在建议的方式。 – 2013-03-01 01:54:53

+0

从我+1以及 – 2013-03-01 01:58:14

+0

也从我+1也;) – Mikhail 2013-03-01 03:53:10

0

这里假定orderprice是整数。您可以使用任何其他格式说明符代替d。 (即f浮法)

string = "Order id %(order)d, price: %(price)d" % {'price': price, 'order': order} 
+0

这样的作品,但我不认为旧的风格有任何方式访问属性。例如'“%(order.id)d”'?? – mgilson 2013-03-01 01:56:18

+0

正确。你将不得不在字典中使用'order.id'。 – 2013-03-01 01:57:42

0

你有列表字符串或字典?如果它是一个真正的列表,那么你不可能做任何有用的事情,因为你不知道什么是价值。但如果这是一个字典,你有几个选择。使用%操作:

"Order number %(order_id)s, price: %(price)s" % dict(order_id=3, price=4.00) 

但我注意到你在你的榜样,这听起来像它意味着orderorder.id是一些自定义的对象。在这种情况下,你可以使用新的方法.format,它可以让你在正确的字符串查找属性:

"Order number {order.id}, price: {price}".format(order=..., price=...)