python - 为什么这两种在Python中创建新字典的方法不是同义词

标签 python dictionary

当我运行此代码时,为什么生成的两个字典不相同。我知道这与它们的声明方式有关,但据我所知,减速后但在赋值之前它们是相同的。

   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/

相关文章:

python - 将 𝝅 计算为随机总和(蒙特卡罗)

python - py-bcrypt 安装在 win 7 64 位 python 上

c# - 如何将 List<X> 转换为 Dictionary<X,Y> 并用 null 填充值?

python - 数据框到字典列表

python - 逗号周围有空格的 CSV

python - 绘制python对象属性和对象存储在列表中

Python3 以十六进制表示打印

STL - 在 C++ 中,当键是带字符串的结构时,如何在带有仿函数的映射上使用 find_if?

hibernate - 加入 map 并在 HQL 中引用它的键/值

dictionary - 测试 MAP 成员资格的常用方法!在《Rebol 2》和《Rebol 3》中都工作?