IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Python字典知识点总结 -> 正文阅读

[开发工具]Python字典知识点总结


字典(dict)

字典是Python的基本数据之一,为了解决列表索引查找速率慢,数据不清晰,字典就此应运而生,解决索引查找速率慢,数据不清晰(比如,把一个人的详细信息储存到列表中,那么该人的名字,年龄,就要先知道其下标,远不如字典获取key名,获取对应的值快、清晰和简单)。


提示:以下是本篇文章正文内容,下面案例可供参考

一、字典的创建

字典是一个无序、可变、有索引的集合。字典可以存储任意类型的值(键名除外),字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用","分割,整个字典包括在花括号{}中。

1.1 key-value形式

raw_dict = {'apple':'苹果','orange':'桔子'}
print(raw_dict)

1.2 dict()转换

(1)关键字参数

raw_dict = dict(one=1, two=2, three=3)
print(raw_dict)  # {'one': 1, 'two': 2, 'three': 3}

(2)元组、列表

raw_dict = dict((('one', 1), ('two', 2), ('three', 3)))  # 元组
print(raw_dict) # {'one': 1, 'two': 2, 'three': 3}
raw_dict = dict([('one', 1), ('two', 2), ('three', 3)])  # 列表
print(raw_dict) # {'one': 1, 'two': 2, 'three': 3}

(3)字典(不推荐,建议直接写出字典)

raw_dict = dict({'one': 1, 'two': 2, 'three': 3})
print(raw_dict)  # {'one': 1, 'two': 2, 'three': 3}

(4)压缩列表:dict(zip(list1,list2))

注意:zip()函数内部的两个列表,元素个数都要相同。
电脑中有一个压缩软件,其压缩包后缀是(*.zip),可联想记忆。

raw_dict = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
print(raw_dict)  # {'one': 1, 'two': 2, 'three': 3}

1.3 列表的推导式

raw_dict = {k: v for k, v in [('one', 1), ('two', 2), ('three', 3)]}
print(raw_dict)  # {'one': 1, 'two': 2, 'three': 3}

1.4 fromkeys()方法:

dict.fromkeys(iterable , set_default_value)

(1)注意:fromkeys()方法,对于已经存在的字典不起作用

  • None字典,不起作用(X)
none_dict = {}
none_dict.fromkeys('one',1)
print(none_dict) # {}
  • 修改键值(键名在字典中,不起作用)(X)
d1 = {'apple':'苹果','orange':'桔子'}
d1.fromkeys('apple','iphone手机')
print(d1) # {'apple': '苹果', 'orange': '桔子'}
  • 添加键值(键名不在字典中,也不起作用)(X)
d1 = {'apple':'苹果','orange':'桔子'}
d1.fromkeys('Banana','香蕉')
print(d1) # {'apple': '苹果', 'orange': '桔子'}

(2)用于快速创建字典(value值需要修改)

  • 字符串
str_dict = dict.fromkeys('abcd', '未赋值')
print(str_dict)  # {'a': '未赋值', 'b': '未赋值', 'c': '未赋值', 'd': '未赋值'}
  • 列表
li_dict = dict.fromkeys([1, 2, 3], '未赋值')
print(li_dict)  # {1: '未赋值', 2: '未赋值', 3: '未赋值'}
  • 元组
t_dict = dict.fromkeys(('a', 'b', 'c'), '未赋值')
print(t_dict)  # {'a': '未赋值', 'b': '未赋值', 'c': '未赋值'}
  • 集合
sets_dict = dict.fromkeys({'name', 'age', 'class'}, '未赋值')
print(sets_dict)  # {'name': '未赋值', 'age': '未赋值', 'class': '未赋值'}

1.5 注意:字典key键为不可变数据类型

"""
不可变(可哈希)的数据类型:int,str,bool,tuple。
可变(不可哈希)的数据类型:list,dict,set。
"""
  • 以下数据类型可以作为字典的key键:
d1 = {3.2: '数字'} # 数字
d2 = {'name': '张三'} # 字符串
d3 = {True: 1, False: 0} # 布尔型
d4 = {(1, 2, 3):['a','b','c']} # 元组
  • 以下数据类型不能作为字典的key键:
# d5 = {[1, 2, 3]: ['a','b','c']} # list是可变的,不能作为key
# d6 = {{1: 2}: ["123","456","789"]} # dict是可变的,不能作为key
# d7 = {{1, 2, 3}: (4,5,6)} # set是可变的, 不能作为key

二、添加与修改

方法一:索引,添加与修改

dict_name[key] = new_value

dict1 = {'name':'张三','age':18}
# 添加
dict1['id'] = 2021001
print(dict1) # {'name': '张三', 'age': 18, 'id': 2021001}
# 修改
dict1['name'] = "李四"
print(dict1) # {'name': '李四', 'age': 18, 'id': 2021001}

方法二:setdefault()方法:只添加

dict2 = {}
# 能添加
dict2.setdefault('id','2021')
print(dict2) # {'id': '2021'}
# 不能修改
dict2.setdefault('id','2020') # 再次对相同的key键名操作,不能修改其value值
print(dict2) # {'id': '2021'}

setdefault()有返回值:

info_dict = {'id':20210001,'name':'张三','age':19}
id_value = info_dict.setdefault('id')
print(id_value) # 20210001,返回对应的value值

方法三:update()方法,添加与修改

推荐:当添加与修改少量数据时,使用"方法一"的索引赋值就够用了;update()方法比较适合大量添加与修改数据,当然添加与修改小量数据,也可以使用该方法,看个人的倾向。

1.关键字参数

注意:此方法传入update()方法时,关键字参数(即键名),不能带引号;关键字参数(即键名)带引号,就变成表达式,程序会报错。

  • 添加
info_dict = {'name':'张三','age':19}
info_dict.update(tel=10086) # tel关键参数不能带引号
print(info_dict) # {'name': '张三', 'age': 19, 'tel': 10086}
  • 修改
info_dict = {'name':'张三','age':19}
info_dict.update(name='李四') # name关键参数不能带引号
print(info_dict) # {'name': '李四', 'age': 19}

2.添加或修改,列表

  • 添加
info_dict = {'name': '张三', 'age': 19}
info_dict.update([('a',1),('b',2)])
print(info_dict) # {'name': '张三', 'age': 19, 'a': 1, 'b': 2}
  • 修改
info_dict = {'name': '张三', 'age': 19}
info_dict.update([('name','老王'),('age',32)])
print(info_dict) # {'name': '老王', 'age': 32}

3.添加或修改,字典

  • 添加
info_dict = {'姓名': '小天使', '年龄': 20}
info_dict.update({'身高': '1.75', '体重': 90})
print(info_dict) # {'姓名': '小天使', '年龄': 20, '身高': '1.75', '体重': 90}
  • 修改
info_dict = {'姓名': '小天使', '年龄': 28}
info_dict.update({'姓名':'小恶魔'})
print(info_dict) # {'姓名': '小恶魔', '年龄': 28}

三、查询

1.索引取值:即按key键获取value值

info_dict = {'name':'张三','age':19}
print(info_dict['name']) # 张三

2.get()方法:获取key键对应的value值

2.1 存在key键时

info_dict = {'name':'张三','age':19}
value = info_dict.get('name') # 存在key键
print('name =',value) # name = 张三

2.2 不存在key键时

info_dict = {'name':'张三','age':19}
value = info_dict.get('a') # 不存在key键
print('name =',value) # name = None

2.3 设置指定键的值不存在时,返回该默认值

info_dict = {'name':'张三','age':19}
value = info_dict.get('a','找不到该键')
print('name =',value) # name = 找不到该键

3.for循环

3.1 items(),keys(),values()的用法

info_dict = {'name':'张三','age':19,'address':'广州'}

# 查询/获取字典所有键值对
print(info_dict.items()) # dict_items([('name', '张三'), ('age', 19), ('address', '广州')])
print(list(info_dict.items())) # [('name', '张三'), ('age', 19), ('address', '广州')]

# 查询/获取字典所有键
print(info_dict.keys()) # dict_keys(['name', 'age', 'address'])
print(list(info_dict.keys())) # ['name', 'age', 'address']

# 查询/获取字典所有值
print(info_dict.values()) # dict_values(['张三', 19, '广州'])
print(list(info_dict.values())) # ['张三', 19, '广州']

3.2 遍历字典

(1)遍历字典所有键值对:items()
info_dict = {
    'id':202101,
    'name':'张三',
    'age':19
}
for item in info_dict.items():
    print(item)
"""输出
('id', 202101)
('name', '张三')
('age', 19)
"""
(2)遍历字典所有键名:keys()
info_dict = {
    'id':202101,
    'name':'张三',
    'age':19
}
for key in info_dict.keys():
    print(key)
"""输出
id
name
age
"""
(3)遍历字典所有值:values()
info_dict = {
    'id':202101,
    'name':'张三',
    'age':19
}
for value in info_dict.values():
    print(value)
"""输出
202101
张三
19
"""
(4)遍历字典的键与值
info_dict = {
    'id':202101,
    'name':'张三',
    'age':19
}
for k,v in info_dict.items():
    print(k,v)
"""输出
id 202101
name 张三
age 19
"""

四、字典中的删除操作

1.pop(key):移除指定key键的key-value键值对

infoDict = {
    'id': 2021001,
    'name': '张三',
    'age': 19,
    'address': '广东广州',
    'tel': 15699998888
}
age = infoDict.pop('age')
# 查看移除的值
print(age)  # 19
# 查看字典的情况
print(infoDict) # {'id': 2021001, 'name': '张三', 'address': '广东广州', 'tel': 15699998888}

2.popitem():删除最后一个key-value键值对

infoDict = {
    'id': 2021001,
    'name': '张三',
    'age': 19,
    'address': '广东广州',
    'tel': 15699998888
}
pop_keyValue = infoDict.popitem()  # 删除最后一个键值对
print(pop_keyValue)  # ('tel', 15699998888)
print(infoDict) # {'id': 2021001, 'name': '张三', 'age': 19, 'address': '广东广州'}

3.del dict_name[key]:删除指定key键

infoDict = {
    'id': 2021001,
    'name': '张三',
    'age': 19,
    'address': '广东广州',
    'tel': 15699998888
}
del infoDict['address']  # 删除指定键名对应的键值对
print(infoDict) # {'id': 2021001, 'name': '张三', 'age': 19, 'tel': 15699998888}

4.del dict_name:删除整个字典

infoDict = {
    'id': 2021001,
    'name': '张三',
    'age': 19,
    'address': '广东广州',
    'tel': 15699998888
}
del infoDict
# print(infoDict) 报错,字典不存在,不能打印

5.clear():清空字典

infoDict = {
    'id': 2021001,
    'name': '张三',
    'age': 19,
    'address': '广东广州',
    'tel': 15699998888
}
infoDict.clear()
print(infoDict)  # {}

五、嵌套字典

info_dict = {
    '姓名': '张三',
    '年龄': 20,
    '出生地': '广东广州',
    '国籍': '中国',
    '兴趣': ['打篮球', '踢足球', '打兵乓球'],
    '社交': {'qq': 'qq10086', '微信': 'vx10010', '知乎': 'zw10000'},
    '读过的书籍': {'语言类': ['汉语言文学', '对外汉语', '中国少数民族语言文学'], '理工类': ['材料化学', '软件工程', '生物科学']},
}
# 获取张三的名字:
print(info_dict['姓名'])
# 获取的兴趣下的踢足球:
print(info_dict['兴趣'][1])
# 获取社交的qq号:
print(info_dict['社交']['qq'])
# 获取汉语言文学
print(info_dict['读过的书籍']['语言类'][0])
# 获取软件工程
print(info_dict['读过的书籍']['理工类'][1])
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 10:56:38  更:2021-09-08 10:58:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 4:40:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计