Python构造字典的两种常用方式:dict(zip)与直接赋值对比

Evan
Evan
发布时间:2026-10-15 | 6人浏览过
原创

本文详解Python中通过dict(zip)和{}直接赋值两种构造字典的方法。对比发现,dict(zip)生成键值对映射,索引速度快但空间占用大;{}方式以列表为值,节省空间但需额外获取索引。通过sys.getsizeof测试验证了不同数据量下的内存差异,为离线保存Embeddings等场景提供选型参考。

Python字典构造的两种基本方法

在Python开发中,构建包含键值对的数据结构是常见需求。最常用的两种手段是利用dict函数配合zip函数进行组合,或者直接使用花括号语法。

例如,我们可以定义一组ID和对应的名称列表。

aid = [i for i in range(10)]
name = [[1] * 3] * len(aid)
dic1 = dict(zip(aid,name))
print('dic1:', dic1)

具体实现如下代码所示。

{0: [1, 1, 1], 1: [1, 1, 1], 2: [1, 1, 1], 3: [1, 1, 1], 4: [1, 1, 1], 5: [1, 1, 1], 6: [1, 1, 1], 7: [1, 1, 1], 8: [1, 1, 1], 9: [1, 1, 1]}

这种方法建立的是aid与name之间的一一映射关系,其中将aid作为字典的key,第二列数据作为value。

除了上述方式,还可以利用dic函数的形式,或者直接通过{}字面量语法来构造字典。

dic2 = {'aid': aid,'name':name}
print('\ndic2:',dic2)

{ ‘aid’: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], ‘name’: [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]] }

这种写法通过建立新的key(如'aid'和'name'),将list作为value进行存储,结构更为扁平。

访问速度与空间占用对比分析

以上两种构造方法,若后续需要通过aid进行索引以获取对应值,处理方式有所不同。

方法1可以直接通过key取出对应的value,访问速度更快;而方法2还需要先获取到index再进行取值,步骤稍多。因此,从访问速度来看,方法1更具优势,但与之相对的是,方法1存储了大量的key-value对,在存储空间占用上不如方法2紧凑。

内存占用测试与场景建议

为了验证空间占用的差异,我们进行了如下测试。

aid = [i for i in range(10)]
name = [[1] * 3] * len(aid)

dic1 = dict(zip(aid,name))
dic2 = {'aid': aid,'name':name}
print('dic1:', dic1)
print(sys.getsizeof(dic1))

print('\ndic2:',dic2)
print(sys.getsizeof(dic2))
dic1: {0: [1, 1, 1], 1: [1, 1, 1], 2: [1, 1, 1], 3: [1, 1, 1], 4: [1, 1, 1], 5: [1, 1, 1], 6: [1, 1, 1], 7: [1, 1, 1], 8: [1, 1, 1], 9: [1, 1, 1]}
360

dic2: {'aid': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'name': [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]}
232

测试结果表明,字典占用的空间大小与键值对的个数并非简单的线性关系。如果在处理大规模数据时,必须考虑内存占用情况。例如,当存在10000个键值对时,该方法可能占用7w字节的空间。(此场景常见于离线保存embeddings数据)

到此这篇关于python通过dict(zip)和{}的方式构造字典的文章就介绍到这了,更多相关python dict构造字典内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表