鉴于:
dict = {"path": "/var/blah"}
curr = "1.1"
prev = "1.0"
什么是内插字符串生成以下最佳/最短途径:
路径:/ VAR /嗒嗒CURR: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)
我的道歉,如果这似乎是一个过于迂腐的问题。
Answer 1:
为什么不:
mystr = "path: %s curr: %s prev: %s" % (mydict[path], curr, prev)
顺便说一句,我已经改变了你使用内置在该名践踏一对夫妇的名字 - 不这样做,它永远需要和偶尔会浪费你很多时间追踪它会导致错误行为(其中一些是使用内置的名字假设它是指内置的,但你有我们自己的变量的名称)隐藏它。
Answer 2:
你可以试试这个:
data = {"path": "/var/blah",
"curr": "1.1",
"prev": "1.0"}
s = "path: %(path)s curr: %(curr)s prev: %(prev)s" % data
Answer 3:
当然,你可以使用较新的(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的新标准,并应首选中所描述的格式% 字符串格式化操作在新的代码。
Answer 4:
也许:
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'
我只是不知道如果你考虑短。
Answer 5:
您也可以(很快)使用F-字符串在Python 3.6,这可能是格式化字符串的最短途径:
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"]}')
Answer 6:
你可以做,如果你把一本字典里面的数据如下:
data = {"path": "/var/blah","curr": "1.1","prev": "1.0"}
"{0}: {path}, {1}: {curr}, {2}: {prev}".format(*data, **data)
Answer 7:
更新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
Answer 8:
如果你不想不变的变量每次添加到您的字典,你可以引用的变量和使用格式的字典键:
str = "path {path} curr: {curr} prev: {prev}".format(curr=curr, prev=prev, **dict)
这可能是不好的形式逻辑,但它使事情更加模块化期待CURR和prev是大多是静态的,并更新字典。
文章来源: Python string interpolation using dictionary and strings