当我运行此代码时,为什么生成的两个字典不相同。我知道这与它们的声明方式有关,但据我所知,减速后但在赋值之前它们是相同的。
H=['DEPTH', 'CALI', 'S-SONIC', 'P-SONIC', 'GR', 'LITH', 'RESISTIVITY', 'NPHI', 'POROS', 'RHOB', 'SWARCH', 'SW_I', 'VP', 'VSH', 'VS']
Val=[]
Val.append(['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'])
Val.append(['16','17','18','19','20','21','22','23','24','25','26','27','28','29','30'])
Dict1={}
for name in H:
Dict1[name] = []
Dict2=dict.fromkeys(H,list())
for line in Val:
values = [float(val) for val in line]
for i, name in enumerate(H):
Dict1[name].append(values[i])
Dict2[name].append(values[i])
print 'DEPTH:', Dict1['DEPTH']
print 'DEPTH:', Dict2['DEPTH']
感谢您的见解,
丹
最佳答案
您的问题在于dict.fromkeys(H, list())
。仅创建一个列表,并将其分配给字典中的每个键。向一个键添加一个值,所有键都会添加该值,因为它们都共享一个列表。
您可以使用字典理解来创建 Dict2
:
Dict2 = {key: [] for key in H}
关于python - 为什么这两种在Python中创建新字典的方法不是同义词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28991960/