在python中,通常通过dict
和zip
组合来构建键值对。
比如:
1
2
3
4
|
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
函数的形式或者{}
直接构造
1
2
|
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,list作为value存储。
以上两种方法,如果想经过aid进行索引取对应值的话:
方法1可以直接取出,方法2还需要获取到index再进行取值。所以法1速度更快但是与之相对的,法1存储了很多个key-value对,在存储空间上不如法2。
空间占用测试如下:
1
2
3
4
5
6
7
8
9
10
|
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)) |
1
2
3
4
5
|
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构造字典内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_42327752/article/details/125855403