15

ここにPythonの新植物。KeyErrorで文字列補間に辞書を使用しているときに、誰かが私が得ているのを手伝ってくれるかどうか疑問に思いましたstr.format

dictionary = {'key1': 'val1', '1': 'val2'}

string1 = 'Interpolating {0[key1]}'.format(dictionary)
print string1

上記は正常に機能し、次のようになります。

Interpolating val1

ただし、次のことを行います。

dictionary = {'key1': 'val1', '1': 'val2'}

string2 = 'Interpolating {0[1]}'.format(dictionary)
print string2

結果:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    string2 = 'Interpolating {0[1]}'.format(dictionary)
KeyError: 1L

したがって、問題は、数字キーをリストインデックス、IMHOとして解釈することにあるようです。これを回避する方法はありますか?(つまり、これが代わりに辞書キーであることを伝えます)

TIAと、この質問が以前に行われたことがある場合はお詫びします(私のsearch-fuに関連するものは何も見つかりませんでした)。

編集1:以前に誤って指摘されたように、キーは数値ではありません。代わりに、 BrenBarnが指摘したように、数値の文字列表現です。

4

4 に答える 4

14

いいえ。ドキュメントによると:

arg_name は引用符で区切られていないため、フォーマット文字列内で任意の辞書キー (文字列 '10' または ':-]' など) を指定することはできません。

したがって、数値で構成される文字列を書式文字列の辞書キーとして使用することはできません。

キーは数値ではなく、リストのインデックスとして使用しようとしていないことに注意してください。キーは、たまたま数字を含む文字列です。やろうとしているのは、数字の 1 (文字列 "1" ではなく) を辞書のキーとして使用することです。数値 1 を辞書のキーとして使用する (つまり、 dict を作成する{'key1': 'val1', 1: 'val2'}) 場合に機能します。

于 2012-06-21T02:38:05.107 に答える
-1

その通りです。パーサーはそれほど複雑ではなく、辞書の可変添え字を処理できません。あなたの回避策は次のとおりです。

string2 = 'Interpolating {somevar}'.format(whateverhere..., somevar=dictionary['1'])
于 2012-06-21T02:45:55.727 に答える