__str__ и двойные кавычки в Python - PullRequest
1 голос
/ 23 марта 2012

Если я определяю dict со строкой, как в

d = {"5": 5}

, печать выводится с одинарными кавычками

>> print d
>> {'5': 5}

Есть ли способ заставить его печатать с двойными кавычками?

РЕДАКТИРОВАТЬ:

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

Ответы [ 4 ]

9 голосов
/ 23 марта 2012

Да (при условии, что у вас есть модуль json):

>>> import json
>>> print json.dumps({'5': 5})
{"5": 5}
>>> 

Количество цитат при использовании print, документы Python говорят:

Строка заключена в двойные кавычки, если строка содержит одинарные кавычки и не содержит двойных кавычек, иначе она заключена в одинарные кавычки.

1 голос
/ 23 марта 2012

Да: создайте свою собственную функцию, которая будет проходить через dict, создайте свое собственное строковое представление, затем напечатайте это.

В качестве альтернативы, закодируйте его как JSON или YAML, что, вероятно, будет делать то, что вы хотите.

0 голосов
/ 23 марта 2012

Вы можете сделать это следующим образом:

>>> d = {"5": 5}
>>> for key,value in d.items():
    print('{{"{0}": {1}}}'.format(key,value))


{"5": 5}

Просто используйте double {, если хотите вывести { с format методом.


Вот решение с использованием метода __str__:

from __future__ import print_function
from itertools import chain,izip,repeat

class singleQuoteDict(dict):
    def __str__(self):
        return ''.join(chain(('{'),
                      (j for i in izip(
                          chain([''],repeat(', ')),
                          ('"{0}": {1!r}'.format(key,value) for key,value in self.items()))
                       for j in i),
                      ('}')))


d = singleQuoteDict({"5": 5, "10": 10})
print(d)

Вывод:

{"10": 10, "5": 5}
0 голосов
/ 23 марта 2012

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

class MyDict(dict):
    def __repr__(self):
        return "my representation"

Например:

>>> d = MyDict()
>>> d["5"] = 5
>>> d
my representation
...