24

鉴于:

dict = {"path": "/var/blah"}
curr = "1.1"
prev = "1.0"

插入字符串以生成以下内容的最佳/最短方法是什么:

路径:/var/blah 当前:1.1 上一个:1.0

我知道这有效:

str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % {"path": dict["path"],"curr": curr, "prev": prev}

但我希望有一种更短的方法,例如:

str = "path: %(path)s curr: %s prev: %s" % (dict, curr, prev)

如果这似乎是一个过于迂腐的问题,我深表歉意。

4

8 回答 8

57

你可以试试这个:

data = {"path": "/var/blah",
        "curr": "1.1",
        "prev": "1.0"}

s = "path: %(path)s curr: %(curr)s prev: %(prev)s" % data
于 2009-08-20T05:20:28.913 回答
28

当然,您可以使用更新的(从 2.6 开始).format字符串方法:

>>> mydict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>>
>>> s = "path: {0} curr: {1} prev: {2}".format(mydict['path'], curr, prev)
>>> s
'path: /var/blah curr: 1.1 prev: 1.0'   

或者,如果所有元素都在字典中,您可以这样做:

>>> mydict = {"path": "/var/blah", "curr": 1.1, "prev": 1.0}
>>> "path: {path} curr: {curr} prev: {prev}".format(**mydict)
'path: /var/blah curr: 1.1 prev: 1.0'
>>>

str.format()文档中:

这种字符串格式化方法是 Python 3.0 中的新标准,应该优先于新代码中字符串格式化操作中描述的 % 格式化。

于 2009-08-20T07:17:00.550 回答
18

为什么不:

mystr = "path: %s curr: %s prev: %s" % (mydict[path], curr, prev)

顺便说一句,我已经更改了您使用的几个名称践踏内置名称 - 不要那样做,它从来不需要,并且偶尔会浪费很多时间来追踪它导致的不当行为(使用某些东西的地方)内置名称假设它表示内置,但您已使用我们自己的变量名称隐藏它)。

于 2009-08-20T05:16:38.203 回答
13

也许:

path = dict['path']
str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()

我的意思是它有效:

>>> dict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>> path = dict['path']
>>> str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()
>>> str
'path: /var/blah curr: 1.1 prev: 1.0'

我只是不知道你是否认为它更短。

于 2009-08-20T05:03:33.440 回答
8

您还可以(很快)在 Python 3.6 中使用f-strings,这可能是格式化字符串的最短方法:

print(f'path: {path} curr: {curr} prev: {prev}')

甚至将所有数据放入一个字典中:

d = {"path": path, "curr": curr, "prev": prev}
print(f'path: {d["path"]} curr: {d["curr"]} prev: {d["prev"]}')
于 2015-12-04T18:37:34.413 回答
4

如果将数据放在字典中,则可以执行以下操作:

data = {"path": "/var/blah","curr": "1.1","prev": "1.0"}

"{0}: {path}, {1}: {curr}, {2}: {prev}".format(*data, **data)
于 2013-04-19T00:12:17.497 回答
2

2016 年更新:从Python 3.6开始,您可以按名称将变量替换为字符串:

>>> origin = "London"
>>> destination = "Paris"
>>> f"from {origin} to {destination}"
'from London to Paris'

注意f"前缀。如果您在 Python 3.5 或更早版本中尝试此操作,您将获得一个SyntaxError.

请参阅https://docs.python.org/3.6/reference/lexical_analysis.html#f-strings

于 2016-12-23T14:56:40.703 回答
1

如果您不想每次都将不变的变量添加到字典中,则可以使用以下格式引用变量和字典键:

str = "path {path} curr: {curr} prev: {prev}".format(curr=curr, prev=prev, **dict)

它在逻辑上可能是不好的形式,但它使事情更加模块化,期望 curr 和 prev 主要是静态的并且字典要更新。

于 2016-05-31T13:44:50.867 回答