Python创建空列表的字典2种方法详解
如果要在Python中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因。本文针对两种方法做了实验和分析。
如果要在Python中创建一个键值都是列表的字典,类似下面这样,该怎么做?
{1:[],2:[],3:[],4:[]}
方法1,字典构造器
用dict构造器生成,构造(key,value)对
>key=[1,2,3,4] >a=dict([(k,[])forkinkey]) >a {1:[],2:[],3:[],4:[]}
方法2,使用fromkeys()
用字典的方法fromkeys(keylist,defaultvalue)
>key=[1,2,3,4] >b={}.fromkeys(key,[]) >b {1:[],2:[],3:[],4:[]}
结果对比
这两种方法生成的字典有没有区别?检验一下:
>a[1].append(1) >a {1:[1],2:[],3:[],4:[]}#仅影响对应的键值列表 > >b[1].append(1) >b {1:[1],2:[1],3:[1],4:[1]}#所有键值列表都受影响
上面的结果中,发现使用fromkeys()方法生成的空列表,都增加了一个元素。似乎他们是同一个对象。
原因分析
从上面看出,用fromkeys()方法生成的字典里的空列表其实是同一个对象。为什么会这样?因为传给fromkeys()函数的参数”[]“是同一个对象,fromkeys()把这一个对象的浅拷贝放在字典里了。
如果这个对象是mutable的,就会在后续的操作中出问题。如果创建字典的对象是mutable的,应该避免使用fromkeys()
更多关于Python创建空列表的字典方法请查看下面的相关链接