我知道可以执行以下操作
d = {}
d['foo'] = 'bar'
print("foo: {d[foo]}".format(**vars()))
foo: bar
但我无法完成以下
d = {}
key = 'foo'
d[key] = 'bar'
print("{key}: {d[key]}".format(**vars()))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'key'
我期待输出“foo:bar” 有没有办法做到这一点?
答案 0 :(得分:3)
看起来这在python标准库的模板中是不可能的。如果你使用jinja,下面的代码就是实现你想要的。
from jinja2 import Template
t = '{% set lookup = d[key] %} {{key}} {{lookup}}'
print Template(t).render(**vars())
<强>输出强>
foo bar
答案 1 :(得分:2)
看看Joran的答案,以及来自DSM的评论:你可以应用基本的黑客来获得一个不太强大的系统。如果你想强有力地做这类事情,你需要使用一个旨在处理它的模板系统。
Jinja 2就是其中之一(jinja.pocoo.org/)。谷歌揭示了更多:https://www.google.com/search?q=python+templating
答案 2 :(得分:1)
"*key*: {d[*key*]}".replace("*key*",key).format(**vars())
也许......
(编辑:将asterix添加到key以使其不太可能替换monkey:P)
答案 3 :(得分:0)
这样的东西有效,但有点难看:
print("{key}: {}".format(eval("{d}['{key}']".format(**vars())), **vars()))
输出:
foo: bar