python教程从基础到精通,第7课—Dictionary(字典)

liftword4个月前 (12-18)技术文章46

Hello,小伙伴们,预祝大家五.一快乐!

前面咱们已学习了七大数据类型的Number(数字)、Boolean(布尔类型)、String(字符串),List(列表),Tuple(元组)。今天咱们来研究进一步学习Dictionary(字典)、Set(集合)

1、Dictionary(字典)的定义

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:

dic = {key1 : value1, key2 : value2, key3 : value3 }

键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字。字典中的元素(key: value对)默认情况下会根据key的ASCII码自动排序,也就是说key改变了,那么这对值在字典中的位置可能就会跟着发生变化。

一个简单的字典示例:

示例代码:

dic1= {} #创建一个空字典
dic2= dict() #创建一个空字典
dic3= {'k1':1,'k2':2,'k3':3,1:'ab',2:'cd',3:'ef'} #key必须为数字或字符串,值可以为任意对象
dic4= dict(one=1,two=2,three=3)
dic5=
dict(zip(('one','two','three'),(1,2,3)))
dic6=
dict((('one', 1), ('two', 2), ('three', 3)))
dic7=
dict({('one', 1), ('two', 2), ('three', 3)})
print(dic1,dic2) # {} {}
print(dic3) # {'k1': 1, 'k2': 2, 'k3': 3, 1: 'ab', 2: 'cd', 3: 'ef'}
print(dic4) # {'one': 1, 'two': 2, 'three': 3}
print(dic5) # {'one': 1, 'two': 2, 'three': 3}
print(dic6) # {'one': 1, 'two': 2, 'three': 3}
print(dic7) # {'one': 1, 'two': 2, 'three': 3}


由于字典的元素是一对key与value,所以没办法像列表与元组一样直接用list(ojb)、turple(ojb)强制,而是要借助dict.fromkeys(ojb)方法,代码如下:

dic1 = ('key1', 'key2', 'key3') # ['key1', 'key2', 'key3']亦可

print(dict.fromkeys(dic1)) # {'key1': None, 'key2': None, 'key3': None}
dic2 = dict.fromkeys(dic1, 'new') # 将元组或列表转成字典的键,其值全为'new'
print(dic2) # {'key1': 'new', 'key2': 'new', 'key3': 'new'}

2、Dictionary(字典)的访问

字典可以通过key访问到相应的值,还存在items类、get、setdefault等方法访问方式,可以提取所有的键,亦可提取所有的值。

直接上代码:

dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print(dica)
print(type(dica.items())) #<class 'dict_items'>
print(tuple(dica.items())) #(('Name', 'Runoob'), ('Age', 7), ('Class', 'First'))
print("dict['Name']:",dica['Name']) #通过key访问值
print("dict['Age']:",dica['Age']) #通过key访问值
for i in dica.keys(): print(i,end=',') #Name,Age,Class,
print()
for i in dica.values(): print(i,end=',') #Runoob,7,First,
print()
for i in dica: print(f'{i}:',dica[i]) #迭代方法,打印整个字典
for i,j in dica.items(): print(f'{i}:',j) #迭代方法,打印整个字典
print(dica.get('age','没有')) #返回key为age的值,没有找到就返回'没有'
print(dica.setdefault('age','没有')) #返回key为age的值,没有找到就返回'没有',但会新建age键,值为’没有‘
print(dica) # {'Name': 'Runoob', 'Age': 7, 'Class': 'First', 'age': '没有'}

3、Dictionary(字典)的操作

1) 改变元素的value

示例代码:

dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dica[
'Age'] = 8
print(dica) # {'Name': 'Runoob', 'Age': 8, 'Class': 'First'}


2) 改变元素的key,巧用pop(key)方法

示例代码:

dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dica[
'NianL'] = dica.pop('Age') #key的替换,用'NianL'代替'Age'
print(dica) # {'Name': 'Runoob', 'Class': 'First', 'NianL': 7}
if 'Age' in dica:
print("这个元素存在")
else:
print("这个元素不存在")

3) 更新字典update()方法

示例代码:

dic1={'name':'Jake','year':1998}
dic2={
'rank':6, 'year':2018}
dic1.update(dic2)
#合并两个字典,key相同的值更新不进去
print(dic1) #{'name': 'Jake', 'year': 2018, 'rank': 6}


4) 删除字典元素pop()、popitem()、del()

示例代码:

dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del dica['Class'] # 删除key为'Class'的元素
print(dica) # {'Name': 'Runoob', 'Age': 7}
del dica['Age'] # 删除key为'Age'的元素
print(dica) # {'Name': 'Runoob'}

dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print(dica.popitem()) #随机删除某键值对,并以元组的形式返回这个键值对,('Class', 'First')
print(dica) #{'Name': 'Runoob', 'Class': 'First'}

del dica # 删除整个字典,后面不可再访问

5) 字典增加元素append()方法

示例代码:

dicta= dict.fromkeys(['k1','k2'],[1]) #将元组或列表转成字典的键,其值全为第二部分
print(dicta) #{'k1': [1], 'k2': [1]}
dicta['k2'].append(666) #因为append是列表的方法,不适用于元组与字典,将字典中的所有值都拓展一个[666]print(dicta) #{'k1': [1, 666], 'k2': [1, 666]}
dicta['k1'] = 777 #修改'k1'的值为777
print(dicta) #{'k1': 777, 'k2': [1, 666]}

6) 字典的浅拷贝与深拷贝

浅拷贝(dict.copy()):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(copy.deepcopy()): 它是copy模块的deepcopy方法,完全拷贝了父对象及其子对象。

dic1 = {'name': 'geek', 'car': [1, 2, 3]}
dic2 = dic1.copy()
print(dic1) #{'name': 'geek', 'car': [1, 2, 3]}
print(dic2) #{'name': 'geek', 'car': [1, 2, 3]}
dic1['car'].append(4)
print(dic1) #{'name': 'geek', 'car': [1, 2, 3, 4]}
print(dic2) #{'name': 'geek', 'car': [1, 2, 3, 4]}


我们再看看深拷贝,需要导入copy模块:

import copy
dic1={
'name':'geek', 'car':[1,2,3]}
dic3=copy.deepcopy(dic1)
print(dic1) #{'name': 'geek', 'car': [1, 2, 3]}
print(dic3) #{'name': 'geek', 'car': [1, 2, 3]}
dic1['car'].append(4)
print(dic1) #{'name': 'geek', 'car': [1, 2, 3, 4]}
print(dic3) #{'name': 'geek', 'car': [1, 2, 3]}

4、字典的内置函数

Python字典包含了以下内置函数:

5、字典的内置方法

Python字典包含了以下内置方法:

愉快学习的时光总是过得很快,一不小心又到结尾啦。

先来给自己一个奖励,双手举起,yeah!

有什么问题可以关注我/私信我/加好友,让我们一起成长吧。

相关文章

一日一技:在Python中创建字典 python中怎么创建字典

Python字典Python字典是键/值对的无序集合, 它是可变的,可以包含混合类型, 字典中的键必须是不可变的对象,例如字符串或数字。 它们在字典中也必须是唯一的。首先我们新建一个empty.py的...

Python教程-字典 字典 python

作为软件开发者,我们总是努力编写干净、简洁、高效的代码。在这篇文章中,我们将介绍你需要知道的关于Python中字典的一切,包括它们是什么,它们如何工作,以及如何在你的代码中有效地使用它们。什么是 Py...

掌握Python字典写入文件的技巧 python怎么把字典写到文件中

Python字典写入文件有多种方法,本文主要介绍以文本格式、JSON格式、CSV格式写入文件的常用方法。以文本格式写入文件如果字典中的值都是简单的数据类型(如字符串、整数、浮点数等),可以将字典转换为...

一文掌握在Python列表中添加元素的多种方法

序列是Python中最基本的数据结构。Python有6种序列类型,但最常见的是列表和元组。列表是最常用的Python数据类型,是用方括号括起来的可变元素序列。列表可以包含任何数据类型,例如整数、浮点数...

Python精讲:在Python中访问字典详解

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中访问字典详解》。本知识点主要内容有:使用print()函数访问字典和使用字典对象的get()方法访问字典。由于昨天上午在...

Python合并2个字典成1个新字典的9种方法

d1 = {'name': 'revotu', 'age': 99} d2 = {'age': 24, 'sex': &...