当前位置: 首页 > 面试题库 >

在pprint输出中禁用排序机制

端木朝
2023-03-14
问题内容

我有一个正在打印的大词典,可以用prettyprint查看,但是如何保持格式但又不能杀死pprint中的排序机制?


问题答案:

您可以猴子修补pprint模块。

import pprint

pprint.pprint({"def":2,"ghi":3,"abc":1,})
pprint._sorted = lambda x:x
# Or, for Python 3.7:
# pprint.sorted = lambda x, key=None: x
pprint.pprint({"def":2,"ghi":3, "abc":1})

由于第二个输出基本上是随机排序的,因此您的输出可能与我的不同:

{'abc': 1, 'def': 2, 'ghi': 3}
{'abc': 1, 'ghi': 3, 'def': 2}

另一个版本更复杂,但更易于使用:

import pprint
import contextlib

@contextlib.contextmanager
def pprint_nosort():
    # Note: the pprint implementation changed somewhere
    # between 2.7.12 and 3.7.0. This is the danger of
    # monkeypatching!
    try:
        # Old pprint
        orig,pprint._sorted = pprint._sorted, lambda x:x
    except AttributeError:
        # New pprint
        import builtins
        orig,pprint.sorted = None, lambda x, key=None:x

    try:
        yield
    finally:
        if orig:
            pprint._sorted = orig
        else:
            del pprint.sorted

# For times when you don't want sorted output
with pprint_nosort():
    pprint.pprint({"def":2,"ghi":3, "abc":1})

# For times when you do want sorted output
pprint.pprint({"def":2,"ghi":3, "abc":1})


 类似资料:
  • 问题内容: 如何使用文件快速关闭所有 Log4J 输出? 问题答案: 将级别设置为OFF(而不是DEBUG,INFO等)。

  • 问题内容: 我在python中遇到JSON问题。 实际上,如果我尝试执行此代码,python会给我一个排序后的JSON字符串! 例如: 这是输出: 如您所见,我尝试使用“ sort_keys = False”,但未进行任何更改。 如何停止Python对JSON字符串排序? 问题答案: 您将值存储到Python中,而Python 根本没有内在的排序概念,它只是键值映射。因此,当您将项目放入变量时,它

  • 问题内容: 我编写了一个简单的中继脚本,该脚本连接到网络摄像机并从套接字读取数据,并使用打印功能输出此数据。数据是已设置边界的MJPG数据。我只是输出读取的数据。 问题是PHP似乎正在缓冲这些数据。当我将相机设置为1 FPS时,Feed将冻结7-8秒,然后快速显示8帧。如果将分辨率设置为很大,则相机每秒将以大约1帧的速度移动。我认为那时正在发生一些缓冲(因为大尺寸的缓冲区会很快填充,而小尺寸的缓冲

  • 本文向大家介绍如何在PowerShell中对输出进行排序?,包括了如何在PowerShell中对输出进行排序?的使用技巧和注意事项,需要的朋友参考一下 要在PowerShell中对输出进行排序,您需要使用Sort-Object Pipeline cmdlet。在下面的示例中,我们将从Get-Process命令中检索输出,然后根据内存和CPU使用率对它们进行排序。 示例 输出结果 在上面的示例中,输

  • 我用Flink编写了一个小测试用例代码来对数据流进行排序。代码如下: 然而,代码只输出执行计划和其他几行。但它不会输出实际排序的数字。我做错了什么?

  • 我正在尝试运行一个python程序,它使用Selenium和Chrome来分析一些网站的数据。我遇到的问题是,Selenium或Webdriver正在向控制台中注入我不关心的输出,使查看我的程序输出变得困难。我读过很多关于这个的帖子,有各种各样的驱动程序选项,但似乎什么都不管用。这些选项的最佳做法是删除以下内容: 但所有这些仍然存在: 有没有办法把这些也去掉?以下是我对webdriver的设置(我