我需要使用 repr 方法返回在课堂上生成的词典,我希望它以单独的行返回。
我有什么方法可以做到吗?
def __repr__:
return str(self.maze)
预期:
{
(0, 0):[(0, 1), (1, 0)]
(0, 1):[(0, 0), (1, 1)]
(1, 0):[(0, 0), (1, 1)]
(1, 1):[(0, 1), (1, 0)]
}
我得到了什么:
{(0, 1): [(0, 0), (1, 1)], (1, 0): [(0, 0), (1, 1)], (0, 0): [(0, 1), (1, 0)], (1, 1): [(0, 1), (1, 0)]}
因为我不能使用" pprint"我不知道是否还有其他办法可以做到。
答案 0 :(得分:3)
我认为你有充分的理由不能使用pprint
......但这不应该那么难:
def __repr__(self):
inner_lines = '\n'.join('%s:%s' % (k, v) for k, v in self.maze.items())
return """\
{
%s
}""" % inner_lines
e.g:
>>> def fmt_dct(d):
... inner_lines = '\n'.join('%s:%s' % (k, v) for k, v in d.items())
... return """\
... {
... %s
... }""" % inner_lines
...
>>> print fmt_dct(d)
{
(0, 1):['abcdefg']
(0, 2):['foo', 'bar']
}
答案 1 :(得分:2)
首先,如果您认为自己无法使用pprint
的唯一原因是因为您没有查看the docs并假设pprint.pprint
是模块中唯一的内容,它不是,即使它是,你总是可以创建一个StringIO
并将其作为stream
参数传递。
但如果你想手动完成,当然可以。您只需要仔细考虑规则,并将它们翻译成Python。
让我们写下很长的路:
def __repr__(self):
lines = ['{']
for key, value in self.maze.items():
lines.append('{}:{}'.format(key, value))
lines.append(['}'])
return '\n'.join(lines)
如果您知道如何编写列表推导,您可以将其转换为单行;如果没有,要么学习,要么保持5行。