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 を使用する場合、以下のコードは目的を達成するための 1 つです。

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 はその 1 つです (jinja.pocoo.org/)。Google はさらに多くのことを明らかにしています: https://www.google.com/search?q=python+templating

于 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 に答える