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