使用字典和字符串的Python字符串插值

25 投票
8 回答
46631 浏览
提问于 2025-04-15 13:44

给定:

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)

如果这个问题显得过于细致,我表示歉意。

8 个回答

29

当然,你可以使用更新的(从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中的新标准,应该在新代码中优先使用,而不是使用%格式化,后者在字符串格式化操作中描述。

59

你可以试试这个:

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

s = "path: %(path)s curr: %(curr)s prev: %(prev)s" % data
18

为什么不这样做:

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

顺便说一下,我改了一些你用的名字,因为它们和内置名称冲突了——不要这样做,这样是没必要的。有时候,这会浪费你很多时间去找出问题的原因(因为有些地方在用内置名称时,以为它指的是内置的东西,但你用自己的变量名把它给遮住了)。

撰写回答