萌新学 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}
相关推荐
烂蜻蜓18 分钟前
前端已死?什么是前端
开发语言·前端·javascript·vue.js·uni-app
老猿讲编程20 分钟前
安全C语言编码规范概述
c语言·开发语言·安全
web135085886351 小时前
Python大数据可视化:基于python的电影天堂数据可视化_django+hive
python·信息可视化·django
东方芷兰1 小时前
伯克利 CS61A 课堂笔记 11 —— Mutability
笔记·python
Biomamba生信基地4 小时前
两天入门R语言,周末开讲
开发语言·r语言·生信
RAN_PAND4 小时前
STL介绍1:vector、pair、string、queue、map
开发语言·c++·算法
Bio Coder4 小时前
R语言安装生物信息数据库包
开发语言·数据库·r语言
Tiger Z4 小时前
R 语言科研绘图第 27 期 --- 密度图-分组
开发语言·程序人生·r语言·贴图
不会Hello World的小苗4 小时前
Java——列表(List)
java·python·list