随机重排字典
我们来看这个字典
>>> test = {'to have': True, 'to get': False, 'having': False}
想象一下
>>> test.random_order()
{'having': False, 'to get': False, 'to have': True}
我该怎么把它随机打乱顺序呢?我应该使用 OrderedDict
和 random.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)