如何在Python中初始化空列表字典?


问题内容

我以编程方式创建列表字典的尝试未能使我单独处理字典键。每当我创建列表字典并尝试将其追加到一个键时,所有这些键都会更新。这是一个非常简单的测试用例:

data = {}
data = data.fromkeys(range(2),[])
data[1].append('hello')
print data

实际结果: {0: ['hello'], 1: ['hello']}

预期结果: {0: [], 1: ['hello']}

这是有效的

data = {0:[],1:[]}
data[1].append('hello')
print data

实际和预期结果: {0: [], 1: ['hello']}

为什么该fromkeys方法无法按预期工作?


问题答案:

[]作为第二个参数传递给dict.fromkeys()会产生相当无用的结果-字典中的所有值将是 相同的 列表对象。

在Python 2.7或更高版本中,您可以改用二元理解:

data = {k: [] for k in range(2)}

在早期版本的Python中,您可以使用

data = dict((k, []) for k in range(2))