字典
定义一个变量保存一个学生的信息:姓名、性别、年龄、身高、体重、成绩
stu = {
'name': "小明",
'sex': "男",
'age': 30,
'height': 177,
'weight': 80,
'score': 78
}
print(stu['name'])
1.什么时候使用字典
同时保存多个意义不同的数据就使用字典
2.什么是字典(dict)
字典是容器型数据类型,将{}作为容器的标志,里面多个元素用逗号隔开(元素必须是键值对):
{key1: value1,
key2: value2,
key3: value3,
...}
字典是可变的(支持增删改); 字典是无序的(不支持下标操作)
元素:必须是键值对;
键 - 必须是不可变的数据(数字、字符串、元组),键是用来对值进行描述和区分的,键必须具有唯一的
值 - 没有要求
dict1 = {}
print(type(dict1)) # <class 'dict'>
键是不可变的
dict2 = {
'name': '小明',
10: 100,
(1, 2): 200
}
list类型不能作为字典的key
1) 键是唯一
2) 字典无序
print({'a': 10, 'b': 20} == {'a': 10, 'b': 20}) # True
print([1, 2, 3] ==[3, 1, 2]) # False
3.字典的增删改查
1) 查 - 获取值
1.1)单个查
a.字典[key] - 获取指定key对应的值
b.
字典.get(key) - 获取指定key对应的值(如果key不会存在不会报错,返回None)
字典.get(key,value) - 获取指定key对应的值(如果key不存在不会报错,返回指定的默认值)
stu1 = {
'name': "小明",
'sex': "男",
'age': 30,
'height': 177,
'weight': 80,
'score': 78
}
print(stu1['name'], stu1['sex']) # 小明 男
print(stu1.get('name')) # 小明
print(stu1.get('breed')) # None
print(stu1['breed']) # KeyError: 'breed'
1.2) 遍历
for 变量 in 字典:
pass
变量依次取到的是字典的key
键值对离开了字典无效
2) 增、改
字典[key] = value - 如果key存在,就修改value;当key不存在,就添加键值对
3) 删
del 字典[key] - 删除指定key对应的键值对
字典.pop(key) - 取出指定key对应的值,并且返回
4.相关方法
1) 字典.clear() - 清空字典
2) 字典.copy() - 复制字典产生一个一模一样的新字典并返回,产生一个新的地址
3) 字典.fromkeys()
dict.fromkeys(序列) - 创建一个新的字典,键是序列中的每一个元素,值都是None
dict.fromkeys(序列, 值) - 创建一个新的字典,键是序列中的每一个元素,值是指定的值
4) keys, values, items
字典.keys() - 获取字典所有的key(返回值是序列但不是列表)
字典.values() - 获取字典所有的值(返回值是序列但不是列表)
字典.items() - 同时获取每个键值对的key和value(返回值是序列,序列中的元素是元组)
d1 = {'a': 10, 'b': 20, 'c': 30}
print(d1.keys()) # dict_keys(['a', 'b', 'c'])
print(d1.values()) # dict_values([10, 20, 30])
print(d1.items()) # dict_items([('a', 10), ('b', 20), ('c', 30)])
5) 字典.setdefault(key, value)
dict.setdefault() - 在字典中添加键值对(只添加不修改已经存在的键值对)
d1.setdefault(‘d’, 100)
print(d1)
6) 字典1.update(字典2) - 将字典2中所有键值对都添加到字典1中
注意:字典2不一定是字典,也可以是能转换成字典的序列
d1 = {'a': 10, 'b': 20, 'c': 30}
d1.update({'name': '小明', 'a': 100})
d1.update(('nm', [10,20]))
print(d1) # {'a': 100, 'b': 20, 'c': 30, 'name': '小明', 'n': 'm', 10: 20}