长春 网站 设计,上海人才网站官网入口,临清网站开发,怎么用ps做网站首页图片尺寸问题起因#xff1a;想在代码中通过已有的列表创建一个字典#xff0c;但是又不想写循环#xff0c;更不想手动填#xff0c;所以用到了字典对象的fromkeys()方法 。 先以一个简单的例子介绍一下该方法#xff1a;
a [A, B, C, 想在代码中通过已有的列表创建一个字典但是又不想写循环更不想手动填所以用到了字典对象的fromkeys()方法 。 先以一个简单的例子介绍一下该方法
a [A, B, C, D]
# 我们想创建一个以列表A中元素为键的字典b, 那么可以这样写
b dict.fromkeys(a, 0) # 显式地指定字典中所有键的值都为0
b dict.fromkeys(a) # 使用默认的值即为None如果我们的代码中也是这种简单的情况那就没有接下来的问题了But不是。 在我的代码中假设我想创建的字典b的键来自于列表a 每个键所对应的默认值我想设置为一个空列表[]所以代码可以表示为
a [A, B, C, D]
b dict.fromkeys(a, [])
print(b) # 输出结果为{A: [], B: [], C: [], D: []}从输出结果来看我们的代码似乎没有毛病。但是真正往列表中添加数据的时候出现了问题请看下面例子
b[A].append(xxx) # 向b[A]这个列表中添加一个字符串 xxx
print(b) # 输出结果为{A: [xxx], B: [xxx], C: [xxx], D: [xxx]}所有的键值对中的值都改变了都变成了[xxx], 就好像它们是同一个列表一样。为了进一步探究我们可以使用id()函数获取这些列表的地址如果地址一样则说明它们是同一个列表所以操作一个就代表操作所有。
print(id(b[A])) # 输出结果2969028980160
print(id(b[B])) # 输出结果2969028980160
print(id(b[C])) # 输出结果2969028980160
print(id(b[D])) # 输出结果2969028980160它们的输出结果完全一致可见对于列表这个可变类型fromkeys()函数只是复制了列表的引用作为默认值。如果想把值初始化为列表并且后续会进行数据存取操作那还是建议动动手写个循环。 就像这样 这次列表的地址就都不一样了
for key in a:a[key] []