1

我需要使用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”,所以我不知道是否还有其他方法可以做到。

4

2 回答 2

3

我认为你有充分的理由不能使用pprint......但这不应该那么难:

def __repr__(self):
    inner_lines = '\n'.join('%s:%s' % (k, v) for k, v in self.maze.items())
    return """\
{
%s
}""" % inner_lines

例如:

>>> 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']
}
于 2014-08-13T05:22:41.610 回答
2

首先,如果你认为你不能使用的唯一原因pprint是因为你没有查看文档并假设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行。

于 2014-08-13T05:24:09.470 回答