3

我知道可以执行以下操作

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”有没有办法做到这一点?

4

4 回答 4

3

看起来这在作为 python 标准库的一部分的模板中是不可能的。如果您使用 jinja,下面的代码就是实现您想要的代码之一。

from jinja2 import Template
t = '{% set lookup = d[key] %} {{key}} {{lookup}}'
print Template(t).render(**vars())

输出

foo bar
于 2012-11-09T18:48:57.307 回答
2

看看 Joran 的回答,以及 DSM 对它的评论:您可以应用基本的技巧来获得一个不太健壮的系统。如果你想稳健地做这种事情,你需要使用一个专门用来处理它的模板系统。

Jinja 2 就是其中之一(jinja.pocoo.org/)。谷歌揭示了更多:https ://www.google.com/search?q=python+template

于 2012-11-09T18:38:50.597 回答
1
 "*key*: {d[*key*]}".replace("*key*",key).format(**vars())

也许 ...

(编辑:将星号添加到键中以使其不太可能替换猴子:P)

于 2012-11-09T18:34:18.450 回答
0

像这样的东西有效,但有点难看:

print("{key}: {}".format(eval("{d}['{key}']".format(**vars())), **vars()))

输出:

foo: bar
于 2012-11-09T18:37:50.637 回答