Функция Python string format(), использующая ноль в синтаксисе для ссылки на словарь

#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().