2012-01-09 22 views
2

はのは、この辞書並べ替え辞書はランダム

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

がどのようにランダムにそれを並べ替えることができ

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

を想像してみて考えてみましょうか? OrderedDictrandom.shuffleを使用する必要がありますか?もしそうなら、どうすればそれらを組み合わせることができますか?

+0

私は最後にdictsの代わりにリストを使用しました。 –

答えて

8

ただ、キー/値ペア(項目)をシャッフルしOrderedDictへのそれらを渡す:

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

辞書を更新しませんか? 'random.shuffle()'は何も返しません。 –

+0

ああ、本当です、ごめんなさい!修正しました。 –

+0

更新ありがとう –

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で始まる場合は、シャッフル(key, value)ペアのリストを取得するには

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

を使用しています。それらをOrderedDictに渡すことができます。これは、キーに関連付けられた注文がある辞書を提供します。

+0

私は一貫性の湖を理解しています。代わりにリストを使うべきだと思う。 –

+1

dictsの代わりにリストを使うと、この問題で私の人生が単純化されました:)ありがとう。 –

+0

ここではディクテーションよりもリストをどのように使いますか? – mango

関連する問題