如何强制dicts无序(用于测试)?

栏目: 编程工具 · 发布时间: 7年前

内容简介:我只花了半天的时间追踪一个错误到一个dict,我在迭代它时忘了排序.即使测试了那部分代码,测试也没有提到它,因为测试期间dict具有可重复的顺序.只有当我洗牌时,测试才会失败! (我使用了一个中间的random.shuffle’d列表并构建了一个OrderedDict)这有点让我感到害怕,因为整个地方可能会有类似的错误!有没有办法在测试过程中全局强制所有dicts无序?

我只花了半天的时间追踪一个错误到一个dict,我在迭代它时忘了排序.即使测试了那部分代码,测试也没有提到它,因为测试期间dict具有可重复的顺序.只有当我洗牌时,测试才会失败! (我使用了一个中间的random.shuffle’d列表并构建了一个OrderedDict)

这有点让我感到害怕,因为整个地方可能会有类似的错误!

有没有办法在测试过程中全局强制所有dicts无序?

更新:我想我至少弄明白是什么导致了这个错误.如 here 所述,具有int键的词典通常是 排序 的,但可能并非总是如此.我的假设:在我的测试中,整数总是很小(10阶),因此总是有序.然而,在实际运行中,整数更大(订单10 ^ 13),因此并不总是有序.我能够在交互式会话中重现这种行为:list(foo.keys())== sorted(foo.keys())对于小键始终为True,但对于每个具有非常大键的dict都不是.

从3.6, dicts maintain key insertion order

开始.如果你希望它们以特定的方式运行,你可以创建一个继承自dict的类,并为它提供你想要的行为(例如,确保它在返回之前对键列表进行洗牌).

无论您使用的是哪个版本的python,如果您想尝试依赖于dict实现的特定行为,请务必查看实现细节.更好的是,为了便于携带,只需编写一个解决方案,确保它们按照您的预期运行,或者如上所述,或者通过在键列表上使用随机播放或其他内容.

翻译自:https://stackoverflow.com/questions/45572938/how-to-force-dicts-to-be-unordered-for-testing


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C专家编程

C专家编程

[美] Peter Vander Linde / 徐波 / 人民邮电出版社 / 2002-12 / 40.00元

《C专家编程》展示了最优秀的C程序员所使用的编码技巧,并专门开辟了一章对C++的基础知识进行了介绍。 书中对C的历史、语言特性、声明、数组、指针、链接、运行时、内存,以及如何进一步学习C++等问题作了细致的讲解和深入的分析。全书撷取几十几个实例进行讲解,对C程序员具有非常高的实用价值。 这本《C专家编程》可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言基础的程序员......一起来看看 《C专家编程》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具