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。固定的。