python内置函数小知识总结

目录

  • dict

dict

知识点:列表解析式,zip,dict
对象的类型变化: 列表-元组-字典

#最开始是看到这样一个用法,觉得挺有意思,dict把列表中的元组变成字典
print(dict([(x,y) for x in range(1,5) for y in range(100,105)]))
>>>{1: 104, 2: 104, 3: 104, 4: 104}
#自己动手实验
import numpy as np
grades = np.random.rand(3)*100
names = ['张三','李四','王五']
print(type(grades),type(names))
print(grades,names)
print(dict([(name,grade)for name in names for grade in grades]))
>>><class 'numpy.ndarray'> <class 'list'>
[49.15836214  2.73379826  6.43290198] ['张三', '李四', '王五']
{'张三': 6.4329019812199295, '李四': 6.4329019812199295, '王五': 6.4329019812199295}
#发现value值都相同,有点不太对。分解后发现:dict() 把列表中的元组转换为对应的字典,应该是元组的生成出现了问题

#原来是因为双重for循环得到了9组数据,元组变字典的过程中,字典的key只能是唯一的,就默认只取了第一次读到的元组。
print([(name,grade)for name in names for grade in grades])
>>>[('张三', 49.15836214177073), ('张三', 2.733798259451403), ('张三', 6.4329019812199295), ('李四', 49.15836214177073), ('李四', 2.733798259451403), ('李四', 6.4329019812199295), ('王五', 49.15836214177073), ('王五', 2.733798259451403), ('王五', 6.4329019812199295)]

#需要用zip函数将两个列表中的元素分别对应起来,得到的就是对应的值了~
print(dict([(name,grade)for name,grade in zip(names,grades)]))
>>>{'张三': 49.15836214177073, '李四': 2.733798259451403, '王五': 6.4329019812199295}


你可能感兴趣的:(基础知识,python,知识点总结)