萌新学 Python 之字典 dict

字典 dict: 使用一对大括号 定义,元素由键: 值对组成

键值之间使用冒号,键值对之间使用逗号分隔

python 复制代码
dict1 = {}    # 空字典
dict2 = {'name': 'zhangsan'}
print(type(dict1), type(dict2))        # <class 'dict'> <class 'dict'>
# 键重复,则显示最后键的值
dict3 = {'name': 'zhangsan', 'name': 'lisi'}
print(type(dict3), dict3)              # <class 'dict'> {'name': 'lisi'}

字典要注意以下几点:

1.字典属于可变的数据类型

2.字典的键相同时,只会记录最后一个键的值

3.字典中的键只能是不可变的数据类型(数值、字符、元组),值数据类型不限

4.字典的键通常为字符和数字,键不会重复

python 复制代码
# 字典中的键只能是不可变的数据类型(数值、字符、元组),值数据类型不限
dict4 = {1: 'a', 'x': 2, ('a', 1): [2, 'b']}
print(type(dict4), dict4)              # <class 'dict'> {1: 'a', 'x': 2, ('a', 1): [2, 'b']}

可以使用 dict 创建字典,有三种格式:

1.关键字:dict(键1 = 值1, 键2 = 值2, ...)

python 复制代码
# 关键字创建字典,dict(键1 = 值1, 键2 = 值2)
d1 = dict(a=1, b=2, c=3)
print(d1)        # {'a': 1, 'b': 2, 'c': 3}

2.元组键值对:dict([(键1, 值1), (键2, 值2), ...])

python 复制代码
# 键值对创建字典,dict([(键1, 值1), (键2, 值2)])
d2 = dict([(1, 'x'), ('y', 2)])
print(d2)        # {1: 'x', 'y': 2}

3. zip 打包映射键值对:dict(zip(迭代对象, 迭代对象))

zip 函数:将多个迭代对象压缩到一组进行进行组合,打包为一个元组,返回 zip 对象

python 复制代码
# zip打包映射键值对:dict(zip(迭代对象, 迭代对象))
z = zip('python', '123456')
print(type(z))      # <class 'zip'>
print(list(z))      # [('p', '1'), ('y', '2'), ('t', '3'), ('h', '4'), ('o', '5'), ('n', '6')]

print(dict(zip('python', '123456')))   # {'p': '1', 'y': '2', 't': '3', 'h': '4', 'o': '5', 'n': '6'}

压缩以最短长度为主

解包:通过 * 将打包的对象进行还原,zip(*打包对象)

查看字典内容:

keys,查看键,类型是 dict_keys 字典视图

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
print(d3.keys(), type(d3.keys()))      # dict_keys(['name', 'age']) <class 'dict_keys'>

获取字典的键,返回字典视图,使用 list 返回列表

python 复制代码
print(list(d3.keys()))    # ['name', 'age']

同理,获取字典的值 values,返回字典视图,使用 list 返回列表

values,查看值,类型是 dict_values 字典视图

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
print(d3.values(), type(d3.values()))    # dict_values(['zhangsan', 18]) <class 'dict_values'>
print(list(d3.values()))    # ['zhangsan', 18]

items 获取键值对组成的元组,list 返回,字典视图是 dict_items

python 复制代码
print(d3.items(), type(d3.items()))      # dict_items([('name', 'zhangsan'), ('age', 18)]) <class 'dict_items'>
print(list(d3.items()))     # [('name', 'zhangsan'), ('age', 18)]

字典的索引:使用一对中括号 [ ] 和 key

格式:字典[键]

返回键的值,键不存在则报错

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
print(d3['name'], d3['age'])    # zhangsan 18

获取字典键的值:

get(键, 新值)

当键存在返回原来的值

键不存在则返回新值,若缺少新值,返回 None

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
# 键存在,再设置新值,返回原来的值
print(d3.get('age', 20))         # 18
# get不存在的键,返回None
print(d3.get('sex'))             # None
# get不存在的键,但设置了新值,返回新值
print(d3.get('sex', '男'))       # 男

setdefault(键, 新值) 与 get(键, 新值) 类似

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
print(d3.setdefault('sex'))      # None
print(d3)                        # {'name': 'zhangsan', 'age': 18, 'sex': None}

二者区别:

当使用 setdefault 获取键时,如果键不存在,将键添加到字典中

所以再在后面添加新值,返回的是原值 None

字典的删除函数:

**pop(指定键):**删除指定的键,返回建的值,键不存在则报错

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
print(d3.pop('age'))             # 18
print(d3)                        # {'name': 'zhangsan'}

popitem():删除最后一对键值,返回元组 (键, 值)

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
print(d3.popitem())              # ('age', 18)
print(d3)                        # {'name': 'zhangsan'}

clear 清空原字典键值,返回 None,原字典变成空字典

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
print(d3.clear())                # None
print(d3)                        # {}  空字典

update(键值对),在原字典中更新内容

python 复制代码
d3 = {'name': 'zhangsan', 'age': 18}
# 更新内容为关键字
d3.update(a=1, b=2)
print(d3)      # {'name': 'zhangsan', 'age': 18, 'a': 1, 'b': 2}
# 更新内容为键值对
d3.update([(1, 'x'), ('y', 2)])
print(d3)      # {'name': 'zhangsan', 'age': 18, 'a': 1, 'b': 2, 1: 'x', 'y': 2}

copy字典的浅拷贝,创建新字典,如果修改可变类型,原内容也会改变

python 复制代码
d4 = {'name': 'zhangsan', 'age': [16, 18, 20]}
print(d4, id(d4))      # {'name': 'zhangsan', 'age': [16, 18, 20]} 2698597154624
# copy复制
d5 = d4.copy()
print(d5, id(d5))      # {'name': 'zhangsan', 'age': [16, 18, 20]} 2698597530368
# 修改字典
d5['age'][0] = 12
print(d5, id(d5))      # {'name': 'zhangsan', 'age': [12, 18, 20]} 2698597530368
# 复制的字典修改后,原字典同样修改
print(d4, id(d4))      # {'name': 'zhangsan', 'age': [12, 18, 20]} 2698597154624

fromkeys(可迭代对象, 值),用来构造字典, 值默认返回 None

python 复制代码
d = {}
# 对象为字符串
dict5 = d.fromkeys('python')
print(dict5)     # {'p': None, 'y': None, 't': None, 'h': None, 'o': None, 'n': None}
dict6 = d.fromkeys('python', 10)
print(dict6)     # {'p': 10, 'y': 10, 't': 10, 'h': 10, 'o': 10, 'n': 10}
# 对象为列表、元组
dict7 = d.fromkeys(['a', 'b'], 20)
print(dict7)     # {'a': 20, 'b': 20}
相关推荐
java1234_小锋1 分钟前
什么是Lua模块?你会如何使用NGINX的Lua模块来定制请求处理流程?
开发语言·nginx·lua
Silence4Allen2 分钟前
VSCode 设置源代码根目录
ide·vscode·python·编辑器·pythonpath
闲人编程18 分钟前
数据分析案例:能源数据分析
python·数据挖掘·数据分析·pandas·能源·数据预处理
web守墓人19 分钟前
【go语言】window环境从源码编译go
开发语言·后端·golang
ypf520830 分钟前
uv 管理python环境
python
The Chosen One9851 小时前
C++:类和对象(上)---镜中万象:C++类的抽象之境与对象的具体之象
开发语言·c++
晓13131 小时前
第十二章 Python语言-大数据分析PySpark(终)
开发语言·python·数据分析
zyx没烦恼1 小时前
线程池&&单例模式
linux·开发语言·c++·单例模式
潘多编程1 小时前
JDK 17 与 Spring Cloud Gateway 新特性实践指南
java·开发语言
HtwHUAT1 小时前
二、UI自动化测试02--元素定位方法
笔记·python·selenium·ui