Loading

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 男
posted @ 2021-04-26 21:35  charlatte  阅读(1052)  评论(0编辑  收藏  举报