Mar*_*rch 77 python dictionary list
我尝试以编程方式创建列表字典是不允许我单独地解决字典键.每当我创建列表字典并尝试附加到一个键时,所有这些都会更新.这是一个非常简单的测试用例:
data = {}
data = data.fromkeys(range(2),[])
data[1].append('hello')
print data
Run Code Online (Sandbox Code Playgroud)
实际结果: {0: ['hello'], 1: ['hello']}
预期结果: {0: [], 1: ['hello']}
这是有效的
data = {0:[],1:[]}
data[1].append('hello')
print data
Run Code Online (Sandbox Code Playgroud)
实际和预期结果: {0: [], 1: ['hello']}
为什么fromkeys
方法不能按预期工作?
Sve*_*ach 93
传递[]
的第二个参数dict.fromkeys()
给出了一个相当无用的结果-在字典中的所有值将是相同的列表对象.
在Python 2.7或更高版本中,您可以使用dicitonary理解:
data = {k: [] for k in range(2)}
Run Code Online (Sandbox Code Playgroud)
在早期版本的Python中,您可以使用
data = dict((k, []) for k in range(2))
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 69
请改用defaultdict:
from collections import defaultdict
data = defaultdict(list)
data[1].append('hello')
Run Code Online (Sandbox Code Playgroud)
这样,您就不必事先将要用于列表的所有键初始化.
您的示例中发生的是您使用一个(可变)列表:
alist = [1]
data = dict.fromkeys(range(2), alist)
alist.append(2)
print data
Run Code Online (Sandbox Code Playgroud)
会输出{0: [1, 2], 1: [1, 2]}
.
您正在使用对单个列表的引用来填充字典,因此在更新它时,更新将反映在所有引用中.请尝试字典理解.请参阅 在Python中使用列表推导创建字典
d = {k : v for k in blah blah blah}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
101098 次 |
最近记录: |