2013-03-01 98 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=...)