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

发布于 2024-08-02 04:44:02 字数 480 浏览 13 评论 0原文

给定:

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)

如果这看起来像一个过于迂腐的问题,我很抱歉。

Given:

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

What's the best/shortest way to interpolate the string to generate the following:

path: /var/blah curr: 1.1 prev: 1.0

I know this works:

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

But I was hoping there is a shorter way, such as:

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

My apologies if this seems like an overly pedantic question.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

傾城如夢未必闌珊 2024-08-09 04:44:02

你可以试试这个:

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

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

You can try this:

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

s = "path: %(path)s curr: %(curr)s prev: %(prev)s" % data
眼泪淡了忧伤 2024-08-09 04:44:02

当然,您可以使用较新的(从 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 中的新标准,以及
应该优先于 %
新代码中的字符串格式化操作中描述的格式。< /p>

And of course you could use the newer (from 2.6) .format string method:

>>> 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'   

Or, if all elements were in the dictionary, you could do this:

>>> 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'
>>>

From the str.format() documentation:

This method of string formatting is
the new standard in Python 3.0, and
should be preferred to the %
formatting described in String Formatting Operations in new code.

酒中人 2024-08-09 04:44:02

为什么不:

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

顺便说一句,我已经更改了您使用的几个名称,这些名称践踏了内置名称 - 不要这样做,它永远不需要,并且偶尔会浪费您大量时间来追踪它导致的不当行为(其中某些东西使用内置名称,假设它意味着内置名称,但您已使用我们自己的变量名称隐藏了它)。

Why not:

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

BTW, I've changed a couple names you were using that trample upon builtin names -- don't do that, it's never needed and once in a while will waste a lot of your time tracking down a misbehavior it causes (where something's using the builtin name assuming it means the builtin but you have hidden it with the name of our own variable).

柠檬色的秋千 2024-08-09 04:44:02

也许:

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'

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

Maybe:

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

I mean it works:

>>> 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'

I just don't know if you consider that shorter.

两人的回忆 2024-08-09 04:44:02

您还可以(很快)在 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"]}')

You can also (soon) use f-strings in Python 3.6, which is probably the shortest way to format a string:

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

And even put all your data inside a dict:

d = {"path": path, "curr": curr, "prev": prev}
print(f'path: {d["path"]} curr: {d["curr"]} prev: {d["prev"]}')
酒浓于脸红 2024-08-09 04:44:02

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

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

"{0}: {path}, {1}: {curr}, {2}: {prev}".format(*data, **data)

You can do the following if you place your data inside a dictionary:

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

"{0}: {path}, {1}: {curr}, {2}: {prev}".format(*data, **data)
倾城月光淡如水﹏ 2024-08-09 04:44:02

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

Update 2016: As of Python 3.6 you can substitute variables into strings by name:

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

Note the f" prefix. If you try this in Python 3.5 or earlier, you'll get a SyntaxError.

See https://docs.python.org/3.6/reference/lexical_analysis.html#f-strings

陪你到最终 2024-08-09 04:44:02

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

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

从逻辑上讲,这可能是不好的形式,但它使事情更加模块化,期望 curr 和 prev 大部分是静态的,并且字典会更新。

If you don't want to add the unchanging variables to your dictionary each time, you can reference both the variables and the dictionary keys using format:

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

It might be bad form logically, but it makes things more modular expecting curr and prev to be mostly static and the dictionary to update.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文