gpt4 book ai didi

python - 我应该如何测试字典将始终以相同的顺序排列?

转载 作者:行者123 更新时间:2023-11-28 17:06:44 26 4
gpt4 key购买 nike

这是一个测试问题,而不是一个实现问题。

我有一个生成 JSON 的程序,我希望能够一致地比较输出,所以我将我所有的字典都转换为 OrderedDicts。

我已经搜索过了,我非常有信心我得到了所有的东西,但是好的编程仍然需要测试。我不确定如何实际测试我的词典是否以相同的顺序出现,因为我告诉他们这样做,而他们恰好以相同的顺序出现......

有没有办法强制 Python 随机化其非有序字典?

预计到达时间:我使用的是 python 2.7。我还有 18 个月的时间来转换这个东西……它在 list 上……

最佳答案

我不确定你是否真的需要测试这个,但如果你这样做......

在 CPython 2.7 中,测试这个真的没有意义。元素将以任意顺序排列——这意味着它们可以任意以与插入顺序相同的顺序结束,并且没有办法强制它们不这样。

在 CPython 3.3-3.5 中,情况更糟。这些元素不仅会以任意顺序排列,而且在您每次运行测试时都会以不同任意顺序排列。这意味着您的测试可能看起来有效,因为它恰好有 3!-1/3! 成功的机会,然后您将 checkin 一个不稳定且无用的测试。

然而,在 CPython 3.6-3.7 中,顺序实际上类似于 OrderedDict,但并不完全相同,这意味着 您可以可靠地测试它.如果您从字典中删除然后插入,旧插槽将被重新使用。当然,对于 OrderedDict 而言,情况并非如此。所以:

>>> d1, d2 = {}, collections.OrderedDict()
>>> for i in range(10):
... d1[i] = d2[i] = i
>>> del d1[2]
>>> del d2[2]
>>> d1[2] = d2[2] = 1000
>>> d1
{0: 0, 1: 1, 2: 1000, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9
>>> d2
OrderedDict([(0, 0),
(1, 1),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(2, 1000)])

但是,这依赖于 CPython 3.6-3.7 的实现细节,这几乎是您尝试测试但没有做的事情。在该测试中这样做是否可以接受?

关于python - 我应该如何测试字典将始终以相同的顺序排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50475966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com