По сути, я хочу напечатать словарь так, чтобы он использовал str()
вместо repr()
для строкового преобразования его ключей и значений.
Это было бы особенно полезно при сохранении строки трассировки в некоторых json. Но это выглядит намного сложнее, чем я себе представляю:
In [1]: import pprint, json
In [2]: example = {'a\tb': '\nthis\tis\nsome\ttext\n'}
In [3]: print(example)
{'a\tb': '\nthis\tis\nsome\ttext\n'}
In [4]: str(example)
Out[4]: "{'a\\tb': '\\nthis\\tis\\nsome\\ttext\\n'}"
In [5]: pprint.pprint(example)
{'a\tb': '\nthis\tis\nsome\ttext\n'}
In [6]: pprint.pformat(example)
Out[6]: "{'a\\tb': '\\nthis\\tis\\nsome\\ttext\\n'}"
In [7]: json.dumps(example, indent=2)
Out[7]: '{\n "a\\tb": "\\nthis\\tis\\nsome\\ttext\\n"\n}'
In [8]: print(json.dumps(example, indent=2))
{
"a\tb": "\nthis\tis\nsome\ttext\n"
}
Я хочу (и ожидаю) такое поведение:
> print(d)
{'a b': '
this is
some text
'}
> pprint.pprint(d)
{
'a b': '
this is
some text
'
}
или, может быть, если pprint действительно умный:
> pprint.pprint(d)
{
'a b': '
this is
some text
'
}
... но я не могу встроить способ сделать это!
Я хотел бы знать, каков стандартный / лучший способ сделать это, и если его нет, почему бы и нет? Есть ли особая причина, по которой repr()
всегда вызывается для строк вместо str()
при печати диктовок (и других контейнеров)?