#python #string #format
#python #строка #формат
Вопрос:
Я читаю документацию Python по более сложному форматированию вывода, и у них есть пример кода, который сбивает с толку. В следующем коде:
table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; Dcab: {0[Dcab]:d}'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
На что 0
ссылается в {0[Jack]:d}
и {0[Sjoerd]:d}
. Объяснение руководства опускает любой намек на функцию этих нулей.
В этом видеоуроке о форматировании строк используется тот же синтаксис, но без четкого его объяснения!
Если я ставлю 1
вместо 0
, я получаю ошибку:
IndexError: tuple index out of range
Что, черт возьми, tuple
имеет к этому отношение?
Взято из документации:
Если у вас действительно длинная строка формата, которую вы не хотите разделять, было бы неплохо, если бы вы могли ссылаться на переменные, форматируемые по имени, а не по позиции. Это можно сделать, просто передав dict и используя квадратные скобки ‘[]’ для доступа к ключам
Комментарии:
1.
0
ссылается на первый аргументformat
, т.е.table
.2. Пожалуйста, не редактируйте ответы в своем вопросе. Для этого и предназначен раздел ответов. =)
Ответ №1:
Вы можете просто использовать:
table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
print('Jack: {Jack}; Sjoerd: {Sjoerd}; Dcab: {Dcab}'.format(**table))
Комментарии:
1. Да, действительно, это способ выбора ключевого слова для извлечения значения из словаря. Большое спасибо за ваш вклад.
Ответ №2:
0
— это индекс format
аргумента, т. е. table
в данном случае.
Это не работает с 1
, потому что есть только один аргумент, это то, что говорит «индекс кортежа вне диапазона».
В документации это упоминается здесь:
Число в скобках может использоваться для обозначения положения объекта, переданного в метод str.format().