Python中如何用两种方式详细创建空列表字典?
- 内容介绍
- 文章标签
- 相关推荐
本文共计842个文字,预计阅读时间需要4分钟。
若要在Python中创建键值是空列表的字典,有多种方法,但方法之间是否有区别需要实验验证,并分析产生差异的原因。
以下针对两种方法进行实验和分析:
方法一:直接创建python创建一个键值为空列表的字典dict1={'key': []}
方法二:使用字典推导式python使用字典推导式创建一个键值为空列表的字典dict2={key: [] for key in ['key']}
实验与分析
1.实验:比较`dict1`和`dict2`是否相同。
2.分析:
- 两种方法创建的字典在表面上看起来是相同的,因为它们都包含一个键`key`和一个空列表作为值。 - 然而,通过深入分析,我们可以发现字典推导式创建的字典在内部表示上可能有所不同。字典推导式会为每个键生成一个唯一的空列表对象,而直接创建的字典则可能使用相同的空列表对象。验证为了验证上述分析,我们可以尝试修改一个字典中的空列表,并观察另一个字典中的列表是否受到影响。
python修改dict1中的列表dict1['key'].append('value')print(dict1) # 输出:{'key': ['value']}
检查dict2中的列表是否受到影响print(dict2['key']) # 输出:[]
通过实验可以发现,修改`dict1`中的列表不会影响`dict2`中的列表。这进一步证实了我们的分析:两种方法创建的空列表在内部表示上确实是不同的对象。
如果要在 Python 中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因。本文针对两种方法做了实验和分析。
如果要在 Python 中创建一个键值都是列表的字典,类似下面这样,该怎么做?
{1:[], 2:[], 3:[], 4:[]}
方法1,字典构造器
用 dict 构造器生成,构造(key,value)对
> key = [1, 2, 3, 4] > a = dict([(k,[]) for k in key]) > a {1: [], 2: [], 3: [], 4: []}
方法2,使用 fromkeys()
用字典的方法fromkeys(key list, default value)
> 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创建空列表的字典方法请查看下面的相关链接
本文共计842个文字,预计阅读时间需要4分钟。
若要在Python中创建键值是空列表的字典,有多种方法,但方法之间是否有区别需要实验验证,并分析产生差异的原因。
以下针对两种方法进行实验和分析:
方法一:直接创建python创建一个键值为空列表的字典dict1={'key': []}
方法二:使用字典推导式python使用字典推导式创建一个键值为空列表的字典dict2={key: [] for key in ['key']}
实验与分析
1.实验:比较`dict1`和`dict2`是否相同。
2.分析:
- 两种方法创建的字典在表面上看起来是相同的,因为它们都包含一个键`key`和一个空列表作为值。 - 然而,通过深入分析,我们可以发现字典推导式创建的字典在内部表示上可能有所不同。字典推导式会为每个键生成一个唯一的空列表对象,而直接创建的字典则可能使用相同的空列表对象。验证为了验证上述分析,我们可以尝试修改一个字典中的空列表,并观察另一个字典中的列表是否受到影响。
python修改dict1中的列表dict1['key'].append('value')print(dict1) # 输出:{'key': ['value']}
检查dict2中的列表是否受到影响print(dict2['key']) # 输出:[]
通过实验可以发现,修改`dict1`中的列表不会影响`dict2`中的列表。这进一步证实了我们的分析:两种方法创建的空列表在内部表示上确实是不同的对象。
如果要在 Python 中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因。本文针对两种方法做了实验和分析。
如果要在 Python 中创建一个键值都是列表的字典,类似下面这样,该怎么做?
{1:[], 2:[], 3:[], 4:[]}
方法1,字典构造器
用 dict 构造器生成,构造(key,value)对
> key = [1, 2, 3, 4] > a = dict([(k,[]) for k in key]) > a {1: [], 2: [], 3: [], 4: []}
方法2,使用 fromkeys()
用字典的方法fromkeys(key list, default value)
> 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创建空列表的字典方法请查看下面的相关链接

