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

Python 在字典查找中使用变量作为字符串格式的键,python,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> Ke

我知道有可能做到以下几点

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'
但我很难做到以下几点

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'
d={}
键='foo'
d[键]=“条”
打印(“{key}:{d[key]}”。格式(**vars())
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
键错误:“键”
我期待输出“foo:bar” 有办法做到这一点吗

 "*key*: {d[*key*]}".replace("*key*",key).format(**vars())
也许


(编辑:将asterix添加到键中,使其不太可能替换monkey:p)

类似的操作很有效,但有点难看:

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

foo: bar

看看Joran的答案,以及DSM对它的评论:你可以应用基本的技巧来获得一个不太健壮的系统。如果您想稳健地完成这类工作,您需要使用专门设计的模板系统来处理它


Jinja2就是这样一个(Jinja.pocoo.org/)。谷歌还透露了更多信息:

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

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

foo bar

您可能需要使用正则表达式,以避免意外地替换
monkey
@DSM中的
键,您的意思是现在要创建自己的模板系统?@Marcin:?我的意思是,正如我写的那样,
replace
有点危险。我倾向于自己使用
string.Template
format
插值,并调整我的数据结构以适应。。。但我不想走那条路。。。。让他称之为k_e_y可能会有用。。。只需选择一个不太可能出现的更独特的名称…@Marcin:如果你愿意,想象一下在我的原始评论中添加“但不要这样做,因为这太多的工作要做”,这或多或少是我认为每个人在正则表达式参与时的感受。不幸的是,我期待的是输出“foo:bar”@kylejmcintyre:Oops。固定的。