Loading...
墨滴

郑大钱呀

2021/09/10  阅读:34  主题:自定义主题1

Python字典详解

关注【郑大钱呀】公众号,回复交流群,进群,我们一起交流,一起学习。

1.1 字典的概念

什么是字典?所谓字典其实也是一种存储数据的容器,但是它存储数据的形式与Python中的其他数据结构不同,它是以键值对的形式来存储数据的,什么是键值对呢?键值对由键(Key)和值(value)两种元素组成,比如语文:80,那么这里的语文就称之为键,80就称之为值,从这里可以看出,键和值是存在一种对应关系的。字典就是由这样一个个键值对组成的。此外字典是可变的。

1.2 字典的定义

我们先来看一段示例代码:

my_dict={"name":"LingQi","age":19}
print(type(my_dict),my_dict)

输出结果如下:

<class 'dict'> {'name': 'LingQi''age'19}

从上面的代码我们可以发现,整个字典是放{}中的,键值对之间使用逗号分割,键值对中的键和值使用来对应。我们需要注意的是字典中键值对必须是确定的,因此必须是不可变的数据类型,比如字符串、元组。不能是一个可变的数据类型,比如列表,报错示例如下:

my_dict={"name":"LingQi",[19,20]:19}
print(type(my_dict),dict)

输出结果如下:

TypeError
<ipython-input-6-a5ba383eb2c2> in <module>
--->1 my_dict={"name":"LingQi",[19,20]:19}
 2 print(type(my_dict),my_dict)
TypeError:unhashable type:'list'

下面我们看一下如何定义一个空的字典,定义空字典有两种方式一种为直接定义,示例代码如下:

my_dict={}
print(type(my_dict),my_dict)

输出结果如下:

<class 'dict'> {}

另一种使用dict()函数定义,示例代码如下:

my_dict=dict()
print(type(my_dict),my_dict)

输出结果如下:

<class 'dict'> {}

我们都知道列表、元组都可以进行嵌套,那么字典可不可以呢?当然可以,所谓字典的嵌套就是说字典键值对的类型也是一个字典,示例代码如下:

my_dict={
 "张三":{
  "sex":"male",
  "age":20,
 },
 "李四":{
  "sex":"male",
  "age":20,
 },
}
print(my_dict)

输出结果如下:

{'张三':{'sex':'male','age':20},'李四':{'sex':'male','age':20}}

从上面的代码我们看出张三是键名,值的类型一个字典,通过这样的方式我们可以很方便的来描述一个对象的信息。

1.3 字典的操作

我们创建了一个字典后,如何去获取里面的元素,要是我们想修改它们,那该怎么办呢?下面我们来学习一下字典的增删改查,此部分不会涉及字典的方法,方法的内容会在下文中单独讲解。

增加数据

向字典中增加数据,示例代码如下:

my_dict={}
my_dict["name"]="LingQi"
print(my_dict)

输出结果如下:

{'name':'LingQi'}

代码解释:我们先定义了一个空字典,然后使用【变量名["键名"]=值】的方式向字典中增加数据。

删除数据

使用del指令删除字典中存在的数据,示例代码如下:

my_dict={'name':"LingQi"}
del my_dict["name"]
print(my_dict)

代码解释:使用【del变量名["键名"]】的方式删除字典中的指定的“键值对”。

修改数据

修改字典中的数据,示例代码如下:

my_dict={'name':'LingQi'}
my_dict["name"]="Jack"
print(my_dict)

输出结果如下:

{'name':'Jack'}

代码解释:这里你可能会有疑问,这个操作怎么和增加数据一样,其实是这样的,其实是这样的,如果你修改的数据字典里面本来就没有,那么字典就会把这个数据增加到字典中,如果字典中已经存在这个值了,字典就会更新对应的数据,所以变量名["键名"]=值它的作用是更新还是增加取决于字典中到底有没有这个数据。

查找数据

获取对应键的值,示例代码如下:

my_dict={'name':'LingQi'}
print(my_dict["name"])

输出结果如下:

LingQi

代码解释:使用变量名["键名"]的方式获取字典中对应键的值,不过需要注意的是如果获取字典中不存在键,就会报错,报错示例如下:

my_dict={"name":"LingQi","height":"180","age":20}
print(my_dict["width"])

输出结果如下:

KeyError
<ipython-input-82-8c0bbb9d220f> in <module>
 1 my_dict={"name":"LingQi","height":"180","age":20}
--->2 print(my_dict["width"])
KeyError:'width'

1.4 字典的常用方法

dict()函数

从上面的学习中我们知道可以使用dict()函数来创建一个空的字典,我们也可以使用dict()函数来将二维结构(比如二维列表、二维数组)的对象转换成字典,示例代码如下:

my_list=[["name","LingQi"],["age","19"],["sex","male"]]
print(dict(my_list))

输出结果如下:

{'name':'LingQi','age':'19','sex':'male'}

keys()函数

该方法用来获取字典的所有的键名,以列表的形式返回,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print(my_dict.keys())

输出结果如下:

dict_keys(['name','age','city'])

values()函数

该方法用来获取字典的所有值,以列表的形式返回,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print(my_dict.values())

输出结果如下:

dict_values(['LingQi','26','shanghai'])

items()函数

该方法用来获取字典的键值对,以元组数组的形式返回,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print(my_dict.items())

输出结果如下:

dict_items([('name':'LingQi'),('age','26'),('city':'shanghai')])

len()函数

返回字典中键值对的数量,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print(len(my_dict))

输出结果如下:

3

clear()函数

清空字典,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print("清空前:",my_dict)
my_dict.clear() #清空字典中所有元素
print("清空后:",my_dict)

输出结果如下:

清空前:{"name":"LingQi","age":"26","city":"shanghai"}
清空后:{}

get()函数

通过键名获取值,如果键名不存在则返回None,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print(my_dict.get("name")) #获取存在的键名的值
print(my_dict.get("sex")) #获取不存在的键名的值

输出结果如下:

LingQi
None

setdefault()函数

该函数的作用是通过键名获取值,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print(my_dict.setdefault("name"))

输出结果如下:

LingQi

如果键名在字典中不存在,返回None,并且会向字典中添加该键,值默认为None,示例代码如下:

my_dict={"name":"LingQi","age":"26","city":"shanghai"}
print(my_dict.setdefult("sex","male"))
print(my_dict)

输出结果如下:

male
{"name":"LingQi","age":"26","city":"shanghai","sex":"male"}

update()函数

该函数的作用是通过一个字典中的“键值对”来更新另一个字典中的“键值对”。如果字典1中的键在字典2中没有,则在字典2中新增字典1的键值对,示例代码如下:

my_dict_1={"sex":"male","height":"180"#字典1
my_dict_2={"name":"LingQi"#字典2
my_dict_2.update(my_dict_1)
print(my_dict_2)

输出结果如下:

{'name':'LingQi','sex':'male','height':'180'}

从上面的代码我们知道,原字典中无sex、height键,所以会在字典中新增键值对。如果字典1中的键在字典2中已经存在,那么字典2中对应键的值更新成字典1对应的值,示例代码如下:

my_dict_1={"height":"170"#字典1
my_dict_2={"name":"LingQi","height":"180"#字典2
my_dict_2.update(my_dict_1)
print(my_dict_2)

输出结果如下:

{'name':'LingQi','height':'170'}

pop()函数

通过指定键名删除键值对,返回被删除键值对的值,示例代码如下:

my_dict={"name":"LingQi","height":"180","age":20}
print(my_dict.pop("height"))
print(my_dict)

输出结果如下:

180
{'name':'LingQi','age':20}

popitem()函数

删除字典中最后一个键值对,以元组形式返回删除的键值对,示例代码如下:

my_dict={"name":"LingQi","height":"180","age":20}
print(my_dict.popitem())
print(my_dict)

输出结果如下:

('age',20)
{'name':'LingQi','height':'180'}

1.5 字典的遍历

1.5.1 遍历字典的所有键

方式一:直接使用for循环,示例代码如下:

my_dict={"name":"LingQi","height":"180","age":20}
for d in my_dict:
 print(d)

输出结果如下:

name
height
age

方式二:使用keys()方法获取键之后,再使用for循环遍历,示例代码如下:

my_dict={"name":"LingQi","height":"180","age":20}
for d in my_dict.keys():
 print(d)

输出结果如下:

name
height
age

1.5.2 遍历字典的所有值

使用values()方法获取值,再使用for循环遍历,示例代码如下:

my_dict={"name":"LingQi","height":"180","age":20}
for d in my_dict.values():
 print(d)

输出结果如下:

LingQi
180
20

1.5.3 遍历字典的所有键值对

方式一:使用items()方法获取键值对,再使用for循环遍历,示例代码如下:

my_dict={"name":"LingQi","height":"180","age":20}
for k,v in my_dict.items():
 print(k,v)

输出结果如下:

name LingQi
height 180
age 20

方式二:通过键名获取对应的值

my_dict={"name":"LingQi","height":"180","age":20}
for d in my_dict:
 print(d,my_dict())

输出结果如下:

name LingQi
height 180
age 20

郑大钱呀

2021/09/10  阅读:34  主题:自定义主题1

作者介绍

郑大钱呀

微信搜索【郑大钱呀】公众号