我有两本钥匙相同的字典。每一项都是一个数组
from numpy import zeros, random
from collections import namedtuple
PhaseAmplitude = namedtuple('PhaseAmplitude','phase amplitude')
dict_keys = {'K1','K2', 'K3'}
J1 = dict.fromkeys(dict_keys, zeros((2,2,2,2)))
U1 = dict.fromkeys(dict_keys, PhaseAmplitude(phase = zeros((2,2)),
amplitude = zeros((2,2))))
for iFld in dict_keys:
U1[iFld] = U1[iFld]._replace(phase = random.random_sample((2,2)),
amplitude = random.random_sample((2,2)))
我想使用第二个字典中的相应项修改第一个字典中的每个项:
for iFld in dict_keys:
J1[iFld][0,0,:,:] += U1[iFld].phase
J1[iFld][0,1,:,:] += U1[iFld].amplitude
我希望得到J1[iFld][0,0,:,:] = U1[iFld].phase
和J1[iFld][0,1,:,:] = U1[iFld].amplitude
,但是我得到的J1[iFld]
对于所有iFld
是相同的,等于U1
的所有iFld
键的和(当然要跟踪phase
和amplitude
字段)
对我来说,这看起来像一个bug,但我只使用Python一个月左右(从matlab切换),所以我不确定
问题:这是预期行为还是错误?为了获得所需的行为,我应该在代码中更改什么
注意:我选择了dict_keys
、J1
和U1
的维度数来反映我的特殊情况
这不是一个bug,尽管它是一个很常见的gotcha,在一些不同的情况下出现
dict.fromkeys
创建一个新字典,其中所有值都是相同的对象。这对于不可变类型(例如int
、str
)非常有效,但是对于可变类型,您可能会遇到问题例如:
这是因为:
在这种情况下,使用听写理解构建词典:
(或python2.7之前的版本):
相关问题 更多 >
编程相关推荐