使用字典和字符串Python字符串插值(Python string interpolation us

2019-07-02 11:01发布

鉴于:

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