Python数据类型之字典类型
字典的概念
字典(dict)中存放的数据是键值对(key-value)的形式。同一个字典中的键(key)是不可重复且唯一的,而值(value)是可以重复的。
字典中的值(value)可以是任意数据类型,但是键(key)必须是不可变的类型,例如整数、字符串、元组都可以作为字典的键(key)。
注意:从python3.6开始,字典是有序的!之前字典都是无序的。
创建字典
字典使用大括号包裹,字典的各个键值对之间使用,
分割,使用:
分割键(key)和值(value)。
dict1 = {"name": "张三", "age": 18, "gender": "男"}
print(dict1) # {'name': '张三', 'age': 18, 'gender': '男'}
print(type(dict1)) # <class 'dict'>
# 创建空字典
# 方式1
dict2 = {}
print(type(dict2)) # <class 'dict'>
# 方式2
dict3 = dict()
print(dict3) # {}
print(type(dict3)) # <class 'dict'>
字典的新增和修改
dict1 = {"name": "张三", "age": 18}
# 向字典中插入新值
dict1["id"] = 100
print(dict1) # {'name': '张三', 'age': 18, 'id': 100}
# 字典里的key不允许重复,如果key已存在,会修改value
dict1["name"] = "李四"
print(dict1) # {'name': '李四', 'age': 18, 'id': 100}
注意:字典是可变数据类型。
字典的删除操作
使用del关键字:
dict1 = {"name": "张三", "age": 18}
#删除字典
del dict1
print(dict1) # NameError: name 'dict1' is not defined
# 删除指定的元素
dict2 = {"name": "张三", "age": 18}
del [dict2["name"]]
print(dict2) # {'age': 18}
# 清空字典
dict4 = {"name": "张三", "age": 18}
dict4.clear()
print(dict4) # {}
当删除不存在的key时,会报异常 KeyError:
dict3 = {"name": "张三", "age": 18}
# 当删除不存在的key时,会报 KeyError
del dict3["gender"]
使用pop()方法:
删除字典中的键值对,并返回指定键(key)的值(value)
dict1 = {"name": "tom", "age": 18}
delete_value = dict1.pop("age")
print(delete_value) # 18
print(dict1) # {'name': 'tom'}
使用popitem()方法:
删除字典的最后一个键值对并将该键值对以元组的形式返回。
dict1 = {"name": "tom", "age": 18, "gender": "男"}
delete_data = dict1.popitem()
print(delete_data) # ('gender', '男')
print(dict1) # {'name': 'tom', 'age': 18}
注: python3.6之前是随机删除一个键值对。
字典的判断操作
in
: 判断指定的键是否存在字典中,如果键存在字典中则返回True,否则返回False
dict1 = {"name": "tom", "age": 18}
print("name" in dict1) # True
print("id" in dict1) # False
not in
: 判断指定的键是否不存在字典中,如果键不存在字典中则返回True,否则返回False
dict1 = {"name": "tom", "age": 18}
print("name" not in dict1) # False
print("id" not in dict1) # True
访问字典的值
想要访问字典里的值,必须使用建(key),才能获取对应的值(value)。
dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1["gender"]) # 男
print(dict1["age"]) # 18
当访问不存在的key时,会报异常 KeyError:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1["id"])
字典中常用的方法
len()
返回字典的元素个数,即键的个数。
dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(len(dict1)) # 3
get()
返回指定键的值,如果键不在字典中,则返回设置的默认的值。
语法:
字典序列.get(key, 默认值)
注: 当指定的key不存在时,则返回第二个参数的值。如果省略第二个参数,则返回None。
示例:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.get("name")) # tom
# 当指定的key不存在时,返回None
print(dict1.get("id")) # None
# 当指定的key不存在时,返回设置的默认的值
print(dict1.get("id", 100)) # 100
keys()
返回字典中所有的键(key),可迭代对象。
dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.keys()) # dict_keys(['name', 'age', 'gender'])
print(type(dict1.keys())) # <class 'dict_keys'>
values()
返回字典中所有的值(value),可迭代对象。
dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.values()) # dict_values(['tom', 18, '男'])
print(type(dict1.values())) # <class 'dict_values'>
items()
返回可迭代的(键, 值) 元组列表。
dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.items()) # dict_items([('name', 'tom'), ('age', 18), ('gender', '男')])
print(type(dict1.items())) # <class 'dict_items'>
setdefault()
为字典键(key)设置值,如果key不存在,则增加新的键值对,如果key已经存在,则不做任何操作。
语法:
字典序列.setdefault(key, default=None)
示例:
dict1 = {"name": "tom", "age": 18}
# 字典中键已经存在,不做任何操作
dict1.setdefault("name", 200)
print(dict1) # {'name': 'tom', 'age': 18}
# 键不存在,则新增键值对
dict1.setdefault("id", 200)
print(dict1) # {'name': 'tom', 'age': 18, 'id': 200}
update()
更新字典中的键值。
一般格式为:
dict1.update(dict2)
示例:
dict1 = {"name": "tom", "age": 18}
dict1.update({"name": "jerry", "id": 100})
print(dict1) # {'name': 'jerry', 'age': 18, 'id': 100}
fromkeys()
接受两个参数用于创建一个新字典,第一个参数为可迭代对象,会循环取出元素作为字典的key值,第二个参数是字典的value值,如果不写第二个参数,则所有的key值所对应的value值均为None,
seq = ('name', 'age', 'sex')
dict1 = dict.fromkeys(seq)
print(dict1) # {'name': None, 'age': None, 'sex': None}
dict2 = dict.fromkeys(seq, "hello")
print(dict2) # {'name': 'hello', 'age': 'hello', 'sex': 'hello'}
copy()
返回字典的浅复制。
dict1 = {"name": "tom", "age": 18}
dict2 = dict1.copy()
print(dict2) # {'name': 'tom', 'age': 18}
字典推导式
字典推导式可以从任意的键值表达式中创建字典。
dict1 = {i: i ** 2 for i in range(1, 6)}
print(dict1)
将两个列表合并成字典:
list1 = ["name", "age", "gender"]
list2 = ["tom", 18, "man"]
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1)
提取字典中的目标数据:
dict1 = {"a": 10, "b": 20, "c": 30, "d": 40}
dict2 = {key: value for key, value in dict1.items() if value > 20}
print(dict2)
字典的遍历
遍历字典的键(key)
方式1:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1.keys():
print(key)
方式2:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1:
print(key)
遍历字典的值(value)
方式1:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
for value in dict1.values():
print(value)
方式2:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1:
print(dict1[key])
遍历字典的键值(key-value)
方式1:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1:
print(key, dict1[key])
输出内容如下:
name tom
age 18
gender 男
方式2:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
for item in dict1.items():
print(item)
输出内容如下:
('name', 'tom')
('age', 18)
('gender', '男')
方式3:
dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key, value in dict1.items():
print(key, value)
输出内容如下:
name tom
age 18
gender 男