雙引號的行爲如果我定義一個字符串的字典中__str__和單VS在Python
d = {"5": 5}
打印顯示器用單引號
>> print d
>> {'5': 5}
有沒有一種方法,使其與打印雙引號?
編輯:
完整的故事是我最初定義的樹作爲嵌套的字典和使用JSON轉移它的語言之間。然後我決定將這些字典包裝在一個類中,但是這打破了我在json中對其進行編碼的方法。
雙引號的行爲如果我定義一個字符串的字典中__str__和單VS在Python
d = {"5": 5}
打印顯示器用單引號
>> print d
>> {'5': 5}
有沒有一種方法,使其與打印雙引號?
編輯:
完整的故事是我最初定義的樹作爲嵌套的字典和使用JSON轉移它的語言之間。然後我決定將這些字典包裝在一個類中,但是這打破了我在json中對其進行編碼的方法。
是(假設你有json
模塊):使用print
當
>>> import json
>>> print json.dumps({'5': 5})
{"5": 5}
>>>
在報價的數量,Python docs說:
的字符串包含在雙引號,如果該字符串包含一個 單引號和雙引號,否則它包含在單引號 中。
是的:創建自己的函數遍歷字典,建立自己的字符串表示,然後打印。
另外,將其編碼爲JSON或YAML,它可能會做你想做的。
您可以創建字典類型的子類,定義自己的字符串表示:
class MyDict(dict):
def __repr__(self):
return "my representation"
例如:
>>> d = MyDict()
>>> d["5"] = 5
>>> d
my representation
你可以這樣來做:
>>> 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}
使用'{{「{0}」:{1!r}}}''可以更好地確保值來自'repr()'而不是'str()'。 – 2012-03-22 21:18:49
爲什麼這是一個問題嗎? – 2012-03-22 21:07:53
正確地做到這一點,覆蓋所有角落的情況下,將是很困難的。如果您實際上正在嘗試編寫JSON輸出,請使用'json'模塊。 – 2012-03-22 21:12:41