|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
现象如下:
- a = [1,2,3,4,5,6,7,8,9,10]
- b = ['a', 'b', 'c']
- c = dict.fromkeys(b, [])
- for i in range(3):
- for k in c.keys():
- c[k].append(a.pop())
-
- c
- {'a': [10, 9, 8, 7, 6, 5, 4, 3, 2], 'b': [10, 9, 8, 7, 6, 5, 4, 3, 2], 'c': [10, 9, 8, 7, 6, 5, 4, 3, 2]}
复制代码
执行完的预期:
- {‘a': [10, 7, 4], 'b': [9, 6, 3], 'c': [8, 5, 2]}
复制代码
你所说的内容和楼主遇到的问题没关系,这里出问题的主要原因如下:
执行下面这个代码就知道为什么:
- a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- b = ['a', 'b', 'c']
- c = dict.fromkeys(b, [])
- print(id(c['a']))
- print(id(c['b']))
- print(id(c['c']))
复制代码
这里代码会打印同一个地址,说明三个键所指向的列表为同一个列表
formkeys 方法创建的字典,字典的键所指向的值都是一个列表,即一个地址的,这也是楼主代码出错的原因
这里导致了你 append 添加的都是同一个列表,所以打印出字典后三个键指向同一个列表的情况
所以不可变数据类型可以用 formkeys 进行初始化,而不推荐初始化为可变数据类型时候使用 formkeys
楼主代码可以这样实现:
- a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- b = ['a', 'b', 'c']
- c = {i:[] for i in b}
- for i in range(3):
- for k in c.keys():
- c[k].append(a.pop())
-
- print(c)
复制代码
|
|