字典dict
语法: {键1: 值1, 键2: 值2, 键3: 值3, …, 键n: 值n}
不能使用切片
说明:键值对: key-value
- 字典和列表类似,都可以用来存储多个数据
- 在列表中查找某个元素时,是根据下标进行的;字典中找某个元素时,是根据**‘名字’—key**(就是冒号:前面的那个值,例如上面代码中的’name’、‘id’、‘sex’)
- 字典中的每个元素都由2部分组成,键:值。例如 ‘name’:‘班长’ ,'name’为键,'班长’为值
- 键可以使用数字、布尔值、元组,字符串等不可变数据类型,但是一般习惯使用字符串,切记不能使用列表等可变数据类型
-
每个字典里的key都是唯一的,如果出现了多个相同的key,后面的value会覆盖之前的value
字典的元素是一个键值和value一一对应:key-value
key的三个特点:
1.唯一性
2.是不可变类型,list,dict,set不可用
3.无序
1.字典定义
d = {"name": "刘亦菲", "age": 33}
# d = {0: 1, 2: 3, (1,): 5}
print(d)
# 定义方法
d = dict(name='鹿晗', age=30) # {'name': '鹿晗', 'age': 30}
print(d)
# zip()
d = dict(zip(['name', 'age'], ['邓超', 45])) # {'name': '鹿晗', 'age': 30}
print(d)
d = dict([('a', 10), ('b', 20), ('c', 30)])
print(d)
2.查询—根据key指查询
print(d["name"])
# print(d["sex"]) # 不存在的key会报错
print(d.get('name'))
print(d.get('sex')) # None,不会报错
print(d.get('sex', '男')) # 如果sex存在值则取对应的值,否则取默认值'男'
key = "name"
print(d[key])
3.遍历
# 3.遍历
d = {"name": "刘亦菲", "age": 33}
'''
for k in d: # 获取的是key
print(k, d[k])
for k in d.keys(): # 获取的是key
print(k, d[k])
'''
'''
for v in d.values(): # 获取value的值
print(v)
'''
for k, v in d.items(): # 获取key和value的值
print(k, v)
print(list(d.keys())) # ['name', 'age']
print(list(d.values())) # ['刘亦菲', 33]
print(list(d.items())) # [('name', '刘亦菲'), ('age', 33)]
4.判断成员
# 成员
print('age' in d) # 判断keys是在字典中存在
print('age'not in d)
5.添加与修改
# 增加
d = {'name': '霉霉', 'age': 33}
d['sex'] = '女' # 如何没有这个key会在末尾添加
print(d)
# 改
d['sex'] = 'girl'
print(d)
6.删除
# d.pop('age')
# d.clear() # 清空字典
# d.popitem() # 默认删除最后一个
# print(d)
print()
7.将字典中的key与value交换位置
# 将字典的key和value交换
dict2 = {'a': 5, 'b:': 4, 6: 1}
print(dict2)
dict3 = {n: k for k, n in dict2.items()} # 字典生成式
print(dict3)
可变类型
字典是属于可变类型,传递的是地址,如果不是使用copy() 函数复制赋值,而是用 == 赋值,那么赋值的两个字典是共用一个地址,那么对一个字典的修改,也会导致另一个字典的值发生改变
d = {"name": "刘亦菲", "age": 33}
print(d) # {"name": "刘亦菲", "age": 33}
d2 = d
d2['name'] = '杨幂'
print(d2) # {'name': '杨幂', 'age': 33}
print(d) # {'name': '杨幂', 'age': 33}
对列表中的字典进行排序
sorted(stu_list, key=lambda n:n['num'])
sorted(stu_list, key=lambda n:n['score'])