KeyError в .format () python 2.6 - PullRequest
       29

KeyError в .format () python 2.6

0 голосов
/ 30 апреля 2018

Я пытаюсь string format {0} и {1} с переменными type и source, но я получаю KeyError:

import json
data = {
        "u_in_record_type": '{0}',
        "u_company_source": '{1}'
    }
data = json.dumps(data)
type="Test"
source="Test"
print(data.format(type, source))
Traceback (most recent call last):
  File "untitled.py", line 10, in <module>
    print(data.format(type, source))
KeyError: '"u_in_record_type"'

1 Ответ

0 голосов
/ 30 апреля 2018

Обречено пытаться применять str.format в дампах json по нескольким причинам, главная из которых заключается в том, что включающий {} дамп строки конфликтует / теряет форматирование.

Я бы предложил предварительно обработать ваш словарь с именованными полями:

import json

data = {
        "u_in_record_type": '{type}',
        "u_company_source": '{source}'
    }

type="Test"
source="Source"

new_data = {k:v.format(type=type,source=source) for k,v in data.items()}

Синтаксис Pre-Python 2.7 (вложения еще не доступны):

new_data = dict((k,v.format(type=type,source=source)) for k,v in data.items())

словарь понимает, что аргументы применяются ко всем записям, которые выбирают те, которые им нужны. Затем вы можете сбросить эту версию словаря.

Вариант, основанный на диктовке (который может быть полезен при большом количестве переменных):

fd = dict(type="Test",source="Source")
new_data = {k:v.format(**fd) for k,v in data.items()}
...