数据分析(二)
夫妻站---字典
字典--python内置的数据结构之一,与列表一样是一个可变序列 可变序列是指可以进行增删改的序列
以键值对的方式存储数据,字典是一个无序的序列 而列表是一个有序序列
scores={‘张三’:100,‘李四’:98,‘王五’:45} 以键值对的方式存储
字典存储数据要经过hash函数 hash(key)得出的数是数据的存储位置
字符串是一个不可变序列,不能进行增删改
字典的创建
最常用的方式:使用花括号 scores={‘张三’:100,‘李四’:200} 键是张三 值是00
使用内置函数dict() dict(name='jack',age=20)等号左侧是键 等号右侧是值
字典中元素的获取
获取字典中的元素 [] scores['张三] 如果字典中不存在指定的key,抛出keyError异常
get()方法 scores.get('张三') 如果字典中不存在指定的key,返回None ,可以通过参数设置默认的value,以便指定的key不存在时返回
scores.get('张三',99)
key的判断
key的判断 in 指定的key在字典红存在返回True '张三' in scores
not in 指定的key不在字典红存在返回True '张三' not in scores
字典元素的删除操作 del score['张三'] 根据指定的键将键值对删除
scores.clear() 将scores中的所有数据都清除
字典元素的增加操作 score[‘张三’]=98
字典元素的修改操作 score[‘张三’]=100 原来有张三这个key将其用新的值覆盖
获取字典视图的方法
keys() 获取字典中的所有key
values()获取字典中的所有value
items()获取字典中的所有key和value键值对
scores={'张三':100,'李四':98,'王五':97}
keys=scores.keys()
print(keys,type(keys))
print(list(keys)) #通过list函数将keys视图转换为数组
dict_keys(['张三', '李四', '王五']) <class 'dict_keys'>['张三', '李四', '王五']
scores={'张三':100,'李四':98,'王五':97}
keys=scores.keys()
print(keys,type(keys))
print(list(keys)) #通过list函数将keys视图转换为数组
items=scores.items()
print(items)
print(list(items)) #转换之后的列表元素是由元组组成的
字典元素的遍历
for item in scores:
print (item) #item是字典的键
print(score[item]) 获取字典的值
print(scores.get(item)) 也是获取字典的值
字典的特点
字典中的所有元素都是一个key-value的键值对,key不允许重复,value可以重复
字典中的元素是无序的
字典中的key必须是不可变对象 整数字符串是不可变的对象
字典也可以根据需要动态伸缩
字典会浪费较大的内存,是一种使用空间换时间的数据结构
字典生成式
将已知的两个列表组成一个字典,使用内置函数zip(),用于将可迭代对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表
items=['Fruits','Books','Others']
prices=[96,78,85]
lst=zip(items,prices)
print(lst)
print(list(lst))
<zip object at 0x000001AD26C97840>
[('Fruits', 96), ('Books', 78), ('Others', 85)]
{item.upper():price for items, price in zip (items,prices)} for后的item用于做键的变量,price用于做值得变量 键和值变量的值是从zip (items,prices)压缩 包中得来的,这个zip是一个可迭代对象,列表本身就是可迭代对象
元组
python内置的数据结构之一,是一个不可变序列
不可变序列:字符串、元组
不变可变序列:没有增删改的操作
可变序列:列表、字典
可变序列:可以对序列执行增删改操作,对象地址不发生更改
元组 t=(‘Python’,'hello',90)使用小括号 列表使用的是【】中括号 字典使用的是{ }
元组的创建方式 元组的数据类型tuple
直接小括号 t=('Python' ,'hello',98)第一种创建方式 这个小括号可以省略不写 只有一个元素的时候 t3=10, 必须加上这个,才可以证明是元组否则认 为是str
使用内置函数函数tuple()t=tuple(('Python' ,'hello',98))
只包含一个元组的元素需要使用逗号和小括号t=(10,)
空列表的创建方式 lst[] 或者 lst=list()
空字典的创建方式 d={} 或者d2=dict()
空元组的创建方式 t4=() t5=tuple()
元组是不可变序列的原因
1. 在多任务环境下,同时操作对象时不需要加锁 (多任务是指多个人都同时操作这个数据,可变对象需要在有人操作时进行加锁,但是不可变对象共享 就可以了)
2. 在程序中尽量使用不可变序列
元组中存储的是对象的引用
如果元组中对象本身是不可变对象,则不能再引用其他对象
(t=(10,[20,30],9) 这里t只想一个元组 元组有三个引用指向,两个分别是不可变对象10 和9 ,另一个是指向一个可变序列列表 列表指向两个不可变序 列20 30 ,引用不能更改 如果想要将指向列表的指针 指向一个新的对象是不可以的,但是可以在指向的列表之中添加新的元素

如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变
元组的遍历
元组是可迭代对象,可以使用 for...in进行遍历 for item in t:
print(item)
浙公网安备 33010602011771号