我正在使用pprint
来很好地打印dict
,而且工作正常。现在我切换到使用来自模块collections
的OrderedDict
。不幸的是,pprint
路由似乎没有意识到这样的对象或多或少也是dict
s,并返回到以长行打印的方式。在
>>> d = { i:'*'*i for i in range(8) }
>>> pprint.pprint(d)
{0: '',
1: '*',
2: '**',
3: '***',
4: '****',
5: '*****',
6: '******',
7: '*******'}
>>> pprint.pprint(collections.OrderedDict(d))
OrderedDict([(0, ''), (1, '*'), (2, '**'), (3, '***'), (4, '****'), (5, '*****'), (6, '******'), (7, '*******')])
还有什么方法可以更好地表示OrderedDict
s吗?也许即使它们被嵌套在一个正常的dict
或{
如果您专门针对CPython*3.6或更高版本,那么您可以just use regular dictionaries而不是{}。您将错过一些methods exclusive to ^{} ,这还不能保证可移植到其他Python实现,**但这可能是完成您正在尝试的最简单的方法。在
*CPython是Python的参考实现,可以从python.org网站.
**CPythonstole this idea from PyPy,因此您可能也可以依赖它在那里工作。在
我找到了一个相对简单的解决方案,但是它包含了使有序字典的输出看起来完全像一个常规的
dict
对象的风险。在使用上下文管理器防止
pprint
排序字典键的原始解决方案来自this answer。在(您也可以用
dict.__repr__
来修补OrderedDict.__repr__
方法,但请不要这样做。)示例:
^{pr2}$试试这个:
d = collections.OrderedDict({ i:'*'*i for i in range(8) })
编辑
pprint.pprint(list(d.items()))
相关问题 更多 >
编程相关推荐