2015-07-11 56 views
3

我試圖用交替條目創建一個循環字典,雖然條目不一定需要交替,只要它們都在字典中,我只是需要最簡單的解決方案將它們全部放在一本字典中。什麼我想一個簡單的例子來實現:用Python中的循環創建一個交替字典

通常情況下,創建一個字典,一個循環我這樣做:

{i:9 for i in range(3)} 
output: {0: 9, 1: 9, 2: 9} 

現在我想要的follwing:

{i:9, i+5:8 for i in range(3)} 
SyntaxError: invalid syntax 

所需的輸出是:

{0:9, 5:8, 1:9, 6:8, 2:9, 7:8} 

或者,這也輸出就可以了,只要所有元素都在字典(順序並不重要):

{0:9, 1:9, 2:9, 5:8, 6:8, 7:8} 

的背景是,我使用

theano.clone(cloned_item, replace = {replace1: new_item1, replace2: new_item2}) 

要更換必須在一個字典中給出的所有項目。

提前致謝!

+0

不僅訂單沒有關係到你的序列工作,它根本不重要:字典是任意訂購的。 – TigerhawkT3

+2

哦,現在我看到你有'8'鍵多次了。對於標準字典來說這是不可能的。 – TigerhawkT3

+0

謝謝。這是一個不幸的例子,關鍵是我的情況是獨一無二的。關鍵是我不知道如何解決語法來創建一個循環。等等,讓我調整示例,使密鑰是唯一的 – User01

回答

2

理解很酷,但並非絕對必要。此外,標準字典不能有重複的密鑰。有data structures for that,但你也可以嘗試有值的list該鍵:

d = {} 
d[8] = [] 
for i in range(3): 
    d[i] = 9 
    d[8].append(i) 

 

>>> d 
{8: [0, 1, 2], 0: 9, 2: 9, 1: 9} 

對於新例如不重複鍵:

d = {} 
for i in range(3): 
    d[i] = 9 
    d[i+5] = 8 

 

>>> d 
{0: 9, 1: 9, 2: 9, 5: 8, 6: 8, 7: 8} 
3

您可以拉動這一關在一個符合itertools

dict(itertools.chain.from_iterable(((i, 9), (i+5, 8)) for i in range(3))) 

解釋:

的內部產生了一堆的元組

((i, 9), (i+5, 8)) for i in range(3) 

這名單表格擴展爲

[((0, 9), (5, 8)), ((1, 9), (6, 8)), ((2, 9), (7, 8))] 

chain.from_iterable然後通過水平壓平就產生

[(0, 9), (5, 8), (1, 9), (6, 8), (2, 9), (7, 8)] 

這當然與dict init,可以採用元組