【问题标题】:How to print sorted dictionary with pprint function [duplicate]如何使用 pprint 功能打印排序字典 [重复]
【发布时间】:2020-09-14 15:09:51
【问题描述】:

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

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 会自动对字典键/值进行排序。
  • 如果您将OrderedDict 用于new_d 会怎样?

标签: python python-3.x function dictionary pprint


【解决方案1】:

pprint() 有一个关键字参数sort_dicts 可以解决您的问题,但它仅在 python 3.8 版本之后可用。

【讨论】:

    【解决方案2】:

    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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      相关资源
      最近更新 更多