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