次のようにシャッフルしたい OrderedDict があります。
od = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
random.shuffle(od)
残念ながら、これは機能せず (python3)、KeyError: 0
例外が発生します。私が取り組んでいる代替手段は、リストに変換し、シャッフルし、OrderedDict を再構築することです。
od_tmp = list(od.items())
random.shuffle(od_temp)
od = OrderedDict(od_tmp)
OrderedDict には順序があるので、直接ソートできるのが妥当と思われます。リストへの変換は非効率的です。
質問は次のとおりです。
- 上記の解決策よりも良い方法はありますか? (使用リストのみに頼ることなく)
- OrderedDict をシャッフルできないのはなぜですか?