Форматирование строк со словарным ключом, который является строкой () числа

Здесь находится неофит Питона. Мне было интересно, может ли кто-нибудь помочь с 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 и извинения, если этот вопрос задан раньше (не удалось найти что-либо, имеющее отношение к моему поисковому fu).

Редактировать 1: Ключ не является числовым, как было ошибочно отмечено ранее. Вместо этого это строковое представление числа – как было указано BrenBarn .

Нет. Согласно документации :

Поскольку arg_name не разделяется запятой, невозможно указать произвольные словарные ключи (например, строки «10» или «: -]») в строке формата.

Таким образом, вы не можете использовать строки, состоящие из чисел, как словарные ключи в строках формата.

Обратите внимание, что ваш ключ не является числовым, и он не пытается использовать его в качестве индекса списка. Ваш ключ – это строка, которая содержит символ цифры. То, что он пытается сделать, это использовать номер 1 (а не строку «1») в качестве словарного ключа. Он будет работать, если вы используете номер 1 в качестве словарного ключа (т. Е. Сделайте свой dict {'key1': 'val1', 1: 'val2'} ).

Я думаю, что вы ищете:

 dictionary = {'key1': 'val1', '1': 'val2'} string2 = 'Interpolating {key1}'.format(**dictionary) print string2 

Вы правы – парсер не такой сложный и не может обрабатывать переменные индексы для словарей. Ваша работа:

 string2 = 'Interpolating {somevar}'.format(whateverhere..., somevar=dictionary['1'])