0

我的代碼是這樣創建單獨的實例:在列表/字典理解每個元素在Python

widgets = {x: Select2Widget(attrs={"style": "width: 300px;"}) for x in 
       ['paper', 'factor', 'cell_line', 'cell_type']} 

這將導致錯誤的原因的widgets的字典中的所有值將共享相同的實例。爲了避免這個問題,我將不得不編寫如下代碼:

widgets = { 
     'paper': Select2Widget(attrs={"style" : "width: 300px;"}), 
     'factor': Select2Widget(attrs={"style" : "width: 300px;"}), 
     'cell_line': Select2Widget(attrs={"style" : "width: 300px;"}), 
     'cell_type': Select2Widget(attrs={"style" : "width: 300px;"}),} 

我想知道這是否是寫簡潔的代碼而在字典中的每個元素的值分配不同的實例的方式。有沒有人有關於此的想法?

回答

3

不,使用dict理解創建單獨的實例

這是字典的理解;鍵和值的左側表達式評估每次迭代

演示:創建

>>> demo = {i: [] for i in range(3)} 
>>> demo[0] is demo[1] 
False 

這裏單獨列出。如果你使用,說,dict.fromkeys()那麼你將共享相同的價值:

>>> demo = dict.fromkeys(range(3), []) 
>>> demo[0] is demo[1] 
True 

因爲你的字典理解使用文字字典表達了attrs關鍵字,你傳遞給Select2Widget()實例的字典是獨一無二的,不在所得字典中的值之間共享。

只要堅持你的詞典理解,它工作得很好。

+0

我明白了〜它不是共享的。它現在有效。謝謝 –

相關問題