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

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

内容简介:我只花了半天的时间追踪一个错误到一个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


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

查看所有标签

猜你喜欢:

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

Java程序员修炼之道

Java程序员修炼之道

[英] Benjamin J. Evans、[荷兰] Martijn Verburg / 吴海星 / 人民邮电出版社 / 2013-7 / 89.00元

本书分为四部分,第一部分全面介绍Java 7 的新特性,第二部分探讨Java 关键编程知识和技术,第三部分讨论JVM 上的新语言和多语言编程,第四部分将平台和多语言编程知识付诸实践。从介绍Java 7 的新特性入手,本书涵盖了Java 开发中最重要的技术,比如依赖注入、测试驱动的开发和持续集成,探索了JVM 上的非Java 语言,并详细讲解了多语言项目, 特别是涉及Groovy、Scala 和Cl......一起来看看 《Java程序员修炼之道》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换