如何使用pprint功能打印排序的字典

问题描述

我有一个简单的字典(old_d),格式为{'stringkey':intvalue,...},我想按值对它进行排序。为此,我使用了。

new_d = {k: v for k,v in sorted(old_d.items(),key=lambda x: x[1])}

如果我使用print(new_d)可以工作,但是当我使用pprint(new_d)时,它会返回给我按键名而不是值排序的字典。我想使用pprint,因为这些词典有很多对象,并且输出不能在一行上,我该怎么做?

解决方法

pprint()有一个关键字参数sort_dicts可解决您的问题,但仅从python 3.8版本开始可用。

,

pprint的最新版本支持sort_dicts参数(为了向后兼容,默认为True):

>>> from pprint import pprint
>>> d = {"foo": "bar","baz": "quux"}
>>> pprint(d)
{'baz': 'quux','foo': 'bar'}
>>> pprint(d,sort_dicts=False)
{'foo': 'bar','baz': 'quux'}

较旧的版本不具有此功能,因为它基于以下事实:字典在较旧的python版本中是无序的,因此,只要顺序是任意的,它将按字母顺序对键进行排序。在python> = 3.7中,字典按插入顺序排列,因此这是通过sort_dicts=False获得的顺序。

不幸的是,在订购字典与pprint赶上这一事实之间,只有一个python版本存在滞后。这是上面重复的内容,但在Python 3.7中如此:

>>> from pprint import pprint
>>> d = {"foo": "bar","baz": "quux"}
>>> pprint(d,sort_dicts=False)
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
TypeError: pprint() got an unexpected keyword argument 'sort_dicts'