字典
1.字典
stu1 = {'name': '小明', 'age': 18, 'gender': '男'}
字典和列表的选择
如果同时保存的多个意义相同的数据(都是年龄、都是名字、都是学生、都是狗)就是用列表;
如果同时保存的多个意义不同的数据就使用字典
2.什么是字典(dict)
1)字典是容器型数据类型,将{}作为容器的标志,里面多个键值对用逗号隔开:{键1:值1,键2:值2…}
2)可变的(增删改的操作);字典是无序(不支持下标操作)
3)元素的要求:字典的元素是键值对
键的要求:a.键必须是不可变类型的数据(一般用字符串) b.键是唯一的
值的要求:没有要求,python中任何数据都可以作为值
# 空字典
dict1 = {}
print(len(dict1)) # 0
print(type(dict1)) # <class 'dict'>
字典是无序的(不支持下标,只有有序容器才支持下标)
print({'a': 1, 'b': 2} == {'b': 1, 'a': 2}) # False
print({'a': 1, 'b': 2} == {'b': 2, 'a': 1}) # True
键是唯一的
dict3 = {'a': 10, 'b': 20, 'c': 30, 'a': 100}
print(dict3) # 100的值会覆盖10
print(dict3['a'])
字典相关操作
1.查单个 - 获取字典的某一个键对应的值
1)字典[键] - 获取字典中指定键对应的值,如果不存在会报错
2)字典.get(键) - 获取字典中指定键对应的值,如果键不存在不会报错,并且返回None
字典.get(键,默认值) - 获取字典中指定对应的值,如果键不存在不会报错,并且返回默认值
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'gender': '母狗'}
print(dog['name']) # 旺财
print(dog.get('name'))
# print(dog['color']) # 报错
print(dog.get('color', '白色'))
2.遍历字典
for 变量 in 字典:
循环体(变量获取到的是键)
方法2:
for 键,值 in 字典.item():
循环体
for i in dog:
print(i)
print(dog[i])
for key, value in dog.items():
print(key, value)
字典的增删改
1.修改某个键对内的值
字典[键] = 新值 - 将字典中指定键对应的值修改成指定的新值
2.增 - 添加键值对
1)字典[键] = 值 - 如果键不存在,就在字典中添加键值对;如果键存在会修改键值对的值
2)字典.setdefault(键,值) - 在字典中添加指定的键值对;如果键存在会保留原来的值(不会修改)
为什么修改和增加的键方法1一样,可以这样理解 ’字典[键] = 值‘ 这个表达式一定会增加键,但是键的唯一性,如果出现相同的键,前面的键的会被后面相同的键的值覆盖,所有有了替换效果,如果没有相同的键,理所应当的成为新的键对
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'gender': '母狗'}
dog['color'] = '黄色'
print(dog)
dog.setdefault('weigth', 15)
print(dog)
什么时候用setdefault,下面有个例子
goods_list = [
{'name': '泡面', 'price': 4, 'discount': 0.9},
{'name': '火腿肠', 'price': 1.5},
{'name': '矿泉水', 'price': 2, 'discount': 0.8},
{'name': '面包', 'price': 5.5},
{'name': '酸奶', 'price': 7.5},
]
# 给没有折扣的商品折扣值为1
for i in goods_list:
i.setdefault('discount',1)
print(goods_list)
3.删 - 删除键值对
del 字典[键] - 删除字典中指定键对应的键值对
字典.pop(键) - 取出字典中指定键对应的值
这个方法中pop方法也是属于有返回值
print(dog.pop('color'))
print(dog)
字典相关操作和方法
字典不支持+、*、>、<、>=、<=、
1. in 和 not in - 判断字典中是否存在或者不存在指定的键
键 in 字典 ; 键 not in 字典
dict1 = {'a': 10, 'b': 20, 'c': 30}
print(10 in dict1) # False
print('b' in dict1) # True
2.相关函数:len、dict (虽然也能用max,min,函数,但是没有意义)
1)len(字典) - 获取字典中键值对的数量
2)dict(数据) - 将指定的数据转换成字典
能转换成字典数据的要求:
a.数据本身是一个序列
b.序列中的元素必须是有且只有两个元素的小序列
c.小序列的第一个元素必须是不可变类型的数据
result = dict(['ab', 'cd', 'ef'])
print(dict(['ab', [10, 20]]))
注意:字典转换成列表的时候,将字典所有的键作为列表的元素
print(list(dict1)) #['a', 'b', 'c']
3.字典相关方法
1)字典.clear() -清空字典
2) 字典.copy() -复制字典产生一个一模一样的新字典(浅拷贝)
3.字典.keys() - 获取字典所有的键,返回一个序列
字典.values() - 获取字典所有的值,返回一个序列
字典.items() - 将字典转换成一个序列。并且将每一个键值对转换成一个元组
print(dict1.keys())
for i in dict1.keys():
print(i)
print(dict1.values())
print(dict1.items())
for i in dict1.items():
print(i)
都是储存在列表中
4)字典1.update(字典2) - 将字典2中所有的键值对添加到字典1
d1 = {'a': 100, 'b': 200}
dict1.update(d1)
print(dict1)