【问题标题】:Python: Inserting variables into a string without order [duplicate]Python:将变量插入没有顺序的字符串[重复]
【发布时间】:2013-03-01 01:51:33
【问题描述】:

是否可以在不知道顺序的情况下将变量值注入字符串?
我很熟悉

"% world" % "Hello"

语法,但有什么可比的

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

我之所以问,是因为我想要一个字符串列表,其中变量的使用及其位置不一致,我想将它们全部替换在一个函数中。

【问题讨论】:

  • 在某处可能存在这样的欺骗,但链接的欺骗没有考虑字符串中属性访问的情况。 "{order.id}".format(order=...)
  • 你是对的;它有点相似,答案也涵盖了它,但我从来没有遇到过这个问题,因为表达这个问题的方式多种多样。

标签: python


【解决方案1】:

你可以使用.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 '

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

【讨论】:

  • +1。这实际上是现在建议的方式。
【解决方案2】:

你有字符串的列表,还是字典?如果它是一个实际的列表,那么你不可能做任何有用的事情,因为你不知道什么是什么值。但如果它是一个字典,你有几个选择。使用% 运算符:

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

但我注意到您的示例中有order.id,这听起来意味着order 是一些自定义对象。在这种情况下,您可以使用较新的 .format 方法,它可以让您直接在字符串中查找属性:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这可行,但我认为旧样式没有任何访问属性的方式。例如"%(order.id)d"??
    • 正确。您必须在字典中使用order.id
    猜你喜欢
    • 2018-12-04
    • 2011-03-22
    • 1970-01-01
    • 2016-08-08
    • 2017-09-08
    • 2016-11-11
    • 2022-11-02
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多