随机重排字典

2 投票
2 回答
3301 浏览
提问于 2025-04-17 09:51

我们来看这个字典

>>> test = {'to have': True, 'to get': False, 'having': False}

想象一下

>>> test.random_order()
{'having': False, 'to get': False, 'to have': True}

我该怎么把它随机打乱顺序呢?我应该使用 OrderedDictrandom.shuffle 吗?如果是的话,我该怎么把它们结合起来呢?

2 个回答

3

你的问题从严格意义上来说不太成立——字典其实是一个从一组“键”到一组“值”的“映射”。所以,字典里的内容没有顺序,因为集合本身是没有顺序的。你在打印字典时看到的顺序是“随机的”,不能完全相信。当你在现代Python中使用-R这个选项时,你就能看到这种随机性。

$ python -R -c 'print dict(foo=10, bar=20, baz=30)'
{'baz': 30, 'foo': 10, 'bar': 20}
$ python -R -c 'print dict(foo=10, bar=20, baz=30)'
{'foo': 10, 'baz': 30, 'bar': 20}

与其使用字典,我觉得你应该用列表,因为列表这种数据结构是有顺序的。如果你先用dict,然后再用

items = test.items()
random.shuffle(items)

来获取一组打乱顺序的(键, 值)对。你可以把这些传给OrderedDict,这样就能得到一个有顺序的字典,键是有顺序的。

9

只需要把键值对(也就是数据项)打乱顺序,然后把它们传递给 OrderedDict 就可以了:

items = test.items()
random.shuffle(items)
OrderedDict(items)

撰写回答