Python-字典的基本操作
前言.字典的介绍
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 。
格式如下所示:d = {key1 : value1, key2 : value2, key3 : value3 }
键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
字典键的特性,两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。
1.字典的创建
1.1、直接赋值创建字典
语法格式:变量名={键1:值1,键2:值2,...}
info={'第一个':0,"第二个":1,"第三个":2} print(info)
1.2、使用内置函数dict()创建字典
内置函数dict()可通过其他字典、“(键,值)”对的序列或关键字参数来创建字典。
#创建空的字典 info2=dict() #使用内置函数dict()通过其他字典创建 info2=dict(info) print(info2) #通过dict和zip结合创建 info4=dict(zip(['num','name','age'],['2003','小明','19'])) print(info4) #{'num': '2003', 'name': '小明', 'age': '19'}
1.3、使用fromkeys()方法创建字典
当所有键对应同一个值时,可使用fromkeys()方法创建字典。
语法格式:dict.fromkeys(seq[,value])
其中,seq为字典的键的列表,value为键对应的同一值,缺省时默认为None
info3=dict.fromkeys(["张三","李四"],18) print(info3) #{'张三': 18, '李四': 18}
2.修改和添加元素
当以指定键为下标给字典元素赋值时,有两种含义:
(1)、若该键在字典中存在,则表示修改该键对应的值
(2)、若该键不存在,则表示添加一个新的键值对,即添加一个新元素到字典中
#如果该“键”在字典中存在,则表示修改该“键”对应的值 print(info4) #{'num': '2003', 'name': '小明', 'age': '19'} info4['age']=18 print(info4['age']) #18 #如果该“键”不存在,则表示添加一个新的“键值对”,即添加一个新元素到字典中 info4['sex']='男' print(info4['sex']) #男 print(info4) #{'num': '2003', 'name': '小明', 'age': 18, 'sex': '男'}
3.删除元素
要删除字典中的元素或整个字典,可以使用del命令、clear()方法、pop()方法或popitem()方法。
3.1、del命令:根据键删除字典中的元素
del根据键删除字典中的元素
del info4['sex'] print(info4) #{'num': '2003', 'name': '小明', 'age': 18}
3.2、clear()方法:删除字典中的所有元素
clear()方法删除字典中的所有元素
info4.clear() print(info4) #{}
3.3、pop()方法:删除指定的键值对,并返回该键的值
语法格式:dict.pop(key[,default])
其中,dict表示字典名,key表示删除的键,default是默认值,当字典中没有要删除的Key时,该方法返回指定的默认值。
pop()方法删除指定的键值对,并返回该键的值。
print(info4.pop('num')) #2003 删除num键值对,并返回原有的值 print(info4.pop('num',0)) #0 因为前面num已经被删除了,无指定值,返回默认值0
3.4、popitem()方法:随机删除并返回一个键值对
语法格式:dict.popitem()
其中,dict表示字典名。该方法无参数,返回值为一个随机的键值对
popitem()方法随机删除并返回一个键值对。
info5={'num': '2003', 'name': '小明', 'age': '19'} print(info5.popitem()) #('age', '19') print(info5) #{'num': '2003', 'name': '小明'}
4.更新字典
update()方法用于将新字典的键值对一次性全部添加到当前字典中,如果两个字典中存在相同的键,则以新字典中的值更新当前字典。
语法格式:dict.update(dict1)
其中,dict表示当前字典,dict1表示新字典
#update()方法将新字典的键值对一次性全部添加到当前字典中,如果两个字典中存在相同的值,则以新字典中的值更新当前字典 info6={'num': '2003', 'name': '小明', 'age': {'19','20'}} #修改num值,同时添加新元素sex info6.update({'num':2002,'sex':'男'}) print(info6) #{'num': 2002, 'name': '小明', 'age': {'19', '20'}, 'sex': '男'}
5.复制字典
#copy()方法,返回字典的浅复制,复制父对象及其子对象的引用 info7=info6.copy() print(info7) #deepcopy()方法,深复制,完全复制父对象及其子对象,此方法包含在copy模块中 info8=copy.deepcopy(info6) print(info8) info9=info6 print("======================================") info6['num']=2001 info6['age'].remove('20')
说明:
(1)info9是直接赋值,都指向同一个对象。所以info6改变info9也改变
print(info9) #{'num': 2001, 'name': '小明', 'age': {'19'}, 'sex': '男'}
(2)info7是浅复制,info6和info7是独立的对象,但他们的子对象还是指向同一个对象。所以num没变但age中的子对象变了
print(info7) #{'num': 2002, 'name': '小明', 'age': {'19'}, 'sex': '男'}
(3)info8是深复制,info6和info8是完全独立的,所以修改info6的值并不会影响info8
print(info8) #{'num': 2002, 'name': '小明', 'age': {'19', '20'}, 'sex': '男'}
6.遍历字典
(1)items()方法可以遍历字典中所有的键值对,该方法返回(键,值)元组。
语法格式:dict.items() 其中dict表示字典
(2)当不需要使用字典中的值时,可使用keys()方法只遍历字典中的键
语法格式:dict.keys()
(3)当只需要使用字典中的值时,可使用values()方法
语法格式:dict.values()
说明:
#item()方法遍历字典中所有的键值对,返回可遍历的(键,值)元组
#key()只遍历字典中的键
#values()遍历字典中的值
例子:
dictionary={ '张三':'zhangsan', '李四':'lisi', '王五':'wangwu', '赵六':'zaoliu', } print('所有键值对:') for e in dictionary.items(): print(e) print('所有键:') for x in dictionary.keys(): print(x,end=' ') print('所有值:') for i in dictionary.values(): print(i,end=' ') # 所有键值对: # ('张三', 'zhangsan') # ('李四', 'lisi') # ('王五', 'wangwu') # ('赵六', 'zaoliu') # 所有键: # 张三 李四 王五 赵六
# 所有值: # zhangsan lisi wangwu zaoliu
字典的内置方法:
序号 |
函数及描述 |
dict.clear() |
删除字典内所有元素 |
dict.copy() |
返回一个字典的浅复制 |
dict.fromkeys() |
创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.get(key, default=None) |
返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
如果键在字典dict里返回true,否则返回false |
|
以列表返回一个视图对象 |
|
返回一个视图对象 |
|
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
|
把字典dict2的键/值对更新到dict里 |
|
返回一个视图对象 |
|
删除字典 key(键)所对应的值,返回被删除的值。 |
|
返回并删除字典中的最后一对键和值。 |
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/17359516.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)