__str__和Python中的单引号和双引号行为

时间:2012-03-22 21:06:43

标签: python quotes

如果我用

中的字符串定义一个字典
d = {"5": 5}

使用单引号打印显示

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

有没有办法用双引号打印?

编辑:

完整的故事是我最初将树定义为嵌套字典,并使用json在语言之间传输。然后我决定将字典包装在一个类中,但这破坏了我在json中编码它的方法。

4 个答案:

答案 0 :(得分:9)

是(假设你有json模块):

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

使用print时的引号数量,Python docs说:

  

如果字符串包含a,则字符串用双引号括起来   单引号,没有双引号,否则单引号   引号。

答案 1 :(得分:1)

是:创建自己的函数,遍历dict,构建自己的字符串表示,然后打印出来。

或者,将其编码为JSON或YAML,这可能会做你想要的。

答案 2 :(得分:0)

您可以创建字典类型的子类并定义自己的字符串表示形式:

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

例如:

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

答案 3 :(得分:0)

你可以这样做:

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


{"5": 5}

如果您想使用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}