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

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

相关问题