如何在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))