在格式字符串中使用变量作为字典查找中的键

时间:2012-11-09 18:23:59

标签: python

我知道可以执行以下操作

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 个答案:

答案 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