python - Python 字典的行为:fromkeys 与字典理解
问题描述
我对此感到恼火:
data = ["A:3", "X:-1", "X:2"]
pairs = [data[i].split(":") for i in range(len(data))]
现在这些对位于嵌套列表中,即:
In[49]: pairs
Out[49]: [['A', '3'], ['X', '-1'], ['X', '2']]
然后让我们用两种方法创建字典,它们应该是等效的:
dico1 = dict.fromkeys([pairs[i][0] for i in range(len(pairs))], [])
dico2 = {pairs[i][0]: [] for i in range(len(pairs))}
我们现在有这个:
dico1
Out[50]: {'A': [], 'X': []}
dico2
Out[51]: {'A': [], 'X': []}
然后让我们对两个 dicts 执行相同的处理:
for i in range(len(pairs)):
dico1[pairs[i][0]].append(int(pairs[i][1]))
for i in range(len(pairs)):
dico2[pairs[i][0]].append(int(pairs[i][1]))
然而,我有这个:
dico1
Out[54]: {'A': [3, -1, 2], 'X': [3, -1, 2]}
dico2
Out[55]: {'A': [3], 'X': [-1, 2]}
但为什么?
对我来说,预期的行为是dico2
. 推荐的fromkeys
方法?使用这种方法在幕后会发生什么?
我想内存内部存在差异,但有关此行为的更多信息将不胜感激。
解决方案
推荐阅读
- julia - Julia v1.6 更新似乎改变了在软局部范围内覆盖现有全局变量的规则
- javascript - 数据表在 tbody 中显示正在加载...而不是显示数据
- swiftui - SwiftUI:更新视图以包含基于用户操作的自定义子视图是一个单独的视图
- react-admin - 在 ReferenceInput 中使用 TextInput
- python - 没有这样的文件或目录,python,visual studio 代码
- typescript - 如何在 deno 中使用 Dropbox v2 上传文件 API?
- node.js - _id 被推送到数组而不是对象
- django - 在后台运行 django 以进行操作
- .net - 实现 Save&Close 操作的 MVVM 方式是什么?
- firebase - FlutterSomePackagePlugin.java 使用或覆盖已弃用的 API