2012-01-09 71 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

我終於使用列表而不是字典。 – 2012-01-09 12:59:47

回答

8

只是洗牌的鍵/值對(項目),並把它們交給OrderedDict

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

它不會更新字典,會嗎? 'random.shuffle()'什麼都不會返回 – 2012-01-09 12:43:22

+0

哦,是的,那是真的,對不起!修復。 – 2012-01-09 13:05:24

+0

感謝您的更新 – 2012-01-09 15:40:51

3

你的問題就沒有意義了嚴格意義上 - 一本字典是從映射的鍵值爲集合的值。因此,他們沒有訂單,因爲集合沒有訂單。您打印字典時看到的順序是「隨機的」,不被信任。你可以看到在行動隨機性當您使用-R標誌與現代的Python:

$ 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) 

獲得洗牌(key, value)對列表。你可以將它們傳遞給OrderedDict,這會給你一個字典,其中的鍵與它們相關聯。

+0

我瞭解連貫性的湖泊。我想我應該用一個列表來代替。 – 2012-01-09 12:33:53

+1

使用列表而不是詞典簡化了我在這個問題上的生活:)謝謝。 – 2012-01-09 12:55:12

+0

如何特別使用列表比字典更好? – mango 2014-03-14 05:53:47