python基础5 字典

一、字典

字典是python的基础数据类型之一:字典可以存储大量的数据,关系型数据。
同样他也是python中唯一的映射类的数据类型。
数据类型的分类:
可变的(不可哈希)数据类型:list,dict
不可变的(可哈希的)数据类型:str,int,bool,tuple
dic = {"name":"jin","age":18,"sex":"male"}
键值对的形式存在的,键: 值
字典的键必须是不可变的数据类型。(工作中:都是由数字,或者str组成)
字典的值是任意数据类型。
dict = {键:值} ---> dict = {不可变的数据类型:任意的数据类型}
优点:
字典可以存储大量的数据,关系型数据。
查询速度快。
python3.5之前包括3.5版本,字典是无序的。
python3.6开始,是有序的。(字典的键等于列表的索引)

复制代码
字典的创建方式
1.直接创建
dic = {'a': 1}

2.dict方法
dic1 = dict({'a':1,'b':2})  # 括号里面直接写字典
dic2 = dict(c=3, d=4)  # 直接写key=value
dic3 = dict([('e',5),('f',6)])  # 括号里面写列表,列表每一个元素是二元组,每个元组是字典的键和值
print(dic1)  # {'a': 1, 'b': 2}
print(dic2)  # {'c': 3, 'd': 4}
print(dic2)  # {'e': 5, 'f': 6}
复制代码

 

字典为什么寻址快
因为:
  字典的键是不可变的数据类型,所以是可哈希的,
  字典在存入内存的时候会将你的所有的key先进行哈希,再将哈希值存入内存中,
  这样在查询的时候可以根据哈希值直接就可以找到,所以查询速度很快!

 

二、字典的增删改查以及其他操作

复制代码
dic = {'name': '小晶', 'age': 23, 'sex': '', 'job': 'NoIt'}

增:
1、直接改,有此key就改,无此key就添加
dic['age'] = 24  #
dic['home'] = '惠州'  # 添加

2、setdefault
有此key则不做任何操作但是给我返回对应的值,无此key则添加
dic.setdefault('sex', '')  # dic有 sex 这个键,那么不做修改,但会返回 sex 原本的值 "女"
print(dic.setdefault('sex', ''))  #

dic.setdefault('hobby', '')  # dic 无hobby这个键,那么新增这个键值对并返回新增的值 "吃"
print(dic)

删:
1、pop:通过键去删除键值对,也有返回值,
如果没有此键,也没有设置参数,则报错,
如果没有此键,但是设置了第二个参数,则不会报错,并且返回第二个参数。
print(dic.pop('name'))  # 小晶
print(dic)  # 'age': 23, 'sex': '女', 'job': 'NoIt'
"""注意:字典的pop和列表的pop有点区别,列表可以直接 list.pop(),默认删除最后一个,但字典必须要有key,即:dict.pop(key),无key会报错""" print(dic.pop('name1')) # 没有此键,没有设置参数,报错 print(dic.pop('name1', None)) # 没有此键,有设置参数,返回参数:None print(dic.pop('name1', '没有此键')) # 没有此键,有设置参数,返回参数:没有此键 2、popitem python3.5之前随机删除某个键值对,3.6以后,删除最后一组键值对。有返回值. print(dic.popitem()) # ('job': 'NoIt') print(dic) # 'name': '小晶', 'age': 23, 'sex': '女' 3、clear: 清空 dic.clear() print(dic) 4、del 按照键删除键值对 del dic['name'] 删除整个字典 del dic print(dic) 改: 1、通过键来改 dic['age'] = 25 print(dic) 2、update dic = {"name": "jin", "age": 18, "sex": "male"} dic2 = {"name": "yin", "weight": 75} dic.update(dic2) # 将dic2中的所有键值对覆盖并添加到dic中 print(dic) # {'name': 'yin', 'age': 18, 'sex': 'male', 'weight': 75} print(dic2) # {'name': 'yin', 'weight': 75} # 也可以直接在update括号内自定义添加,与写两个字典结合一样原理 dic.update(a='666', b='222', name='xiaobai') print(dic) # {'name': 'xiaobai', 'age': 18, 'sex': 'male', 'a': '666', 'b': '222'} 查: dic = {"name": "jin", "age": 18, "sex": "male"} 通过键直接查询,没有此键则报错 print(dic['name']) # jin print(dic['name1']) # 报错 通过get()方法查询,没有此键则默认返回None, 也可以自定义参数 print(dic.get('name')) # jin print(dic.get('name1')) # None print(dic.get('name1', '没有此键')) # 没有此键 其他方法: 1、dic.keys():输出键,可以转化成list,可以遍历 print(dic.keys(), type(dic.keys())) # 类似于列表:dict_keys(['name', 'age', 'sex']) <class 'dict_keys'> l1 = list(dic.keys()) # 转化成list print(l1) # ['name', 'age', 'sex'] for key in dic.keys(): # 遍历 print(key) # name age sex 2、dic.values():输出值,可转化成list,可遍历。 print(dic.values()) # 类似于列表:dict_values(['jin', 18, 'male']) print(list(dic.values())) # 转化成list, ['jin', 18, 'male'] for key in dic.values(): # 遍历 print(key) 3、dic.items(): 输出键值对,可转化成list,可遍历。 print(dic.items()) # 类似于列表:dict_items([('name', 'jin'), ('age', 18), ('sex', 'male')]) print(list(dic.items())) # 转化成列表:[('name', 'jin'), ('age', 18), ('sex', 'male')] 4、for循环输出字典: for i in dic.items(): print(i) 结果:以元组形式输出 ('name', 'jin') ('age', 18) ('sex', 'male') for k, v in dic.items(): print(k, v) 结果:本身是什么类型输出就是什么类型 name jin age 18 sex male # 注意: for i in dic: print(i) 相当于 for i in dic.keys(): print(i) 5、长度: print(len(dic)) 6、分别赋值: a, b = 10, 20 print(a, b) # a = 10 , b = 20 int型 a, b = [10, 20] print(a, b) # a = 10 , b = 20 int型 a, b = ['10', '20'] print(a, b) # a = 10 , b = 20 str型 a, b = [(1, 2), (3, 4)] print(a, b) # a = (1, 2), b = (3, 4) tuple型 7、互换值 a = 10 b = 20 a, b = b, a print(a, b) # a = 20 , b = 10
复制代码

 

三、字典的嵌套

复制代码
dic = {'name_list': ['狗子', 'xiaoming', '张大力', 'xiaobai'],
       1: {'name': 'xiaobai', 'age': 18, 'sex': ''},
       (1, 2): [100, {'ip': '192.168.1.1', 'port': 3306}]
       }
1, 给name_list对应的列表追加一个值: 曹操.
dic['name_list'].append('曹操')
print(dic)

dic.get('name_list').append('曹操')
print(dic)

2, 将name_list对应的xiaoming变成全部大写.
dic['name_list'][1] = dic['name_list'][1].upper()
print(dic)

3, 将1对应的字典添加一个键值对: weight: 75
dic[1]['weight'] = 75
print(dic)

dic.get(1).setdefault('weight', 75)
print(dic)

4, 将1对应的字典的name键对应的名字xiaobai换成xiaohei
dic[1]['name'] = 'xiaohei'
print(dic)

5, 将{'ip': '192.168.1.1', 'port': 3306}此字典的port键值对删除.
dic[(1, 2)][1].pop('port')
print(dic)
复制代码

 

posted @   我用python写Bug  阅读(307)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示