2016-04-17 32 views
-2

一個Dictonary我有一本字典,看起來像這樣:我能爭搶的Python

a = {1 : True, 2 : False, 3 : True, 4 : False, etc} 

我怎麼能搶的值,以得到這樣的事情?在字典中的值

a = {1 : True, 2 : True, 3 : False, 4 : False, etc} 
+0

你嘗試過什麼到目前爲止,結果是什麼,爲什麼在那裏不滿意?有什麼問題? – zegkljan

+3

那究竟是什麼被炒了?交換鍵和值?隨機翻轉布爾值?沒有「加擾」的標準定義,您需要提供一個。 –

+0

對不起,我的意思是隨機分配一個密鑰到一個值 –

回答

1

如果「爭先恐後」你的意思是隨機重新安排鍵值對,你能做到這一點的一條線,像這樣:

from random import sample 

a = dict(zip(a, sample(a.values(), len(a)))) 

這並不像使用shuffle高效,但是。

另外,請注意,在Python 3中,dict.values返回dict_values object,其行爲與您預期的不符。因此,你需要寫如下:

a = dict(zip(a, sample(list(a.values()), len(a)))) 

+0

尼斯,很好的使用'random.sample'。 –

+0

@zondo謝謝,趕上! –

+0

當然,但是如果OP想要隨機翻轉布爾值呢?這個問題並沒有定義他們'亂搞'的含義。 –

2

我不知道是否有一個更清潔的方式,但random.shuffle應該把工作做好。

from random import shuffle 

a = {1 : True, 2 : False, 3 : True, 4 : False} 

values = list(a.values()) 
shuffle(values) 

shuffled = dict(zip(a, values)) 
# {1: True, 2: False, 3: False, 4: True} 
1
import random 

randValues = a.values() 
random.shuffle(randValues) 

for k in a: 
    a[k] = randValues.pop() 
0

可能是你想要的:

>>> a = {1 : True, 2 : False, 3 : True, 4 : False} 
>>> import random 
>>> for key in a: 
...  val = random.choice([True, False]) 
...  a[key] = val 
... 
>>> a 
{1: True, 2: True, 3: True, 4: False}