LogoLogo
  • README
  • 前端编程
    • 01 Node JS
    • 02-ES6详解
    • 03-NPM详解
    • 04-Babel详解
    • 05-前端模块化开发
    • 06-WebPack详解
    • 07-Vue详解
    • 08-Git详解
    • 09-微信小程序
  • 人工智能
    • 机器学习
      • 二次分配问题
      • 非负矩阵
      • 概率潜在语义分析
      • 概率图模型
      • 集成学习
      • 降维
      • 距离度量
      • 决策树
      • 逻辑回归
      • 马尔可夫决策过程
      • 马尔可夫链蒙特卡洛法
      • 朴素贝叶斯法
      • 谱聚类
      • 奇异值分解
      • 潜在狄利克雷分配
      • 潜在语义分析
      • 强化学习
      • 社区算法
      • 时间序列模型
      • 特征工程
      • 条件随机场
      • 图论基础
      • 线性分类
      • 线性回归
      • 信息论中的熵
      • 隐马尔科夫模型
      • 支持向量机
      • 主成分分析
      • EM算法
      • Hermite 矩阵的特征值不等式
      • k-means聚类
      • k近邻法
      • PageRank算法
    • 深度学习
      • Pytorch篇
        • 01-线性模型
        • 02-梯度下降法
        • 03-反向传播
        • 04-pytorch入门
        • 05-用pytorch实现线性回归
        • 06-logistic回归
        • 07-处理多维特征的输入
        • 08-加载数据集
        • 09-多分类问题
        • 10-卷积神经网络
        • 11-循环神经网络
    • 图神经网络
      • 图神经网络笔记01
        • 01-图(Graphs)的结构
        • 02-网络的性质和随机图模型
        • 03-网络工具
        • 04-网络中的主题和结构角色
        • 05-网络中的社区结构
      • 图神经网络笔记02
        • 01-深度学习引言
        • 02-神经网络基础
        • 03-卷积神经网络
        • 04-图信号处理与图卷积神经网络
        • 05-GNN的变体与框架-
        • [06-Google PPRGo 两分钟分类千万节点的最快GNN](人工智能/图神经网络/图神经网络笔记02/06-Google%20PPRGo 两分钟分类千万节点的最快GNN.md)
        • 07-序列模型
        • 08-变分自编码器
        • 09-对抗生成网络
  • 日常记录
    • 健身日记
    • 面经记录
    • 自动生成Summary文件
  • 实战项目
    • 谷粒商城
      • 00-项目概述
      • 01-分布式基础-全栈开发篇
      • 02-分布式高级-微服务架构篇
      • 03-高可用集群-架构师提升篇
  • 数据库
    • MySQL笔记
      • 01-MySQL基础篇
      • 02-MySQL架构篇
      • 03-MySQL索引及调优篇
      • 04-MySQL事务篇
      • 05-MySQL日志与备份篇
    • Redis笔记
      • 01-Redis基础篇
      • 02-Redis高级篇
    • 02-Redis篇
  • 算法笔记
    • 01-算法基础篇
    • 02-算法刷题篇
  • 职能扩展
    • 产品运营篇
  • Go编程
    • 01-Go基础
      • 01-Go基础篇
  • Java编程
    • 01-Java基础
      • 01-Java基础篇
      • 02-多线程篇
      • 03-注射与反解篇
      • 04-JUC并发编程篇
      • 05-JUC并发编程与源码分析
      • 06-JVM原理篇
      • 07-Netty原理篇
      • 08-设计模式篇
    • 02 Java Web
      • 01-Mybatis篇
      • 01-Mybatis篇(新版)
      • 02-Spring篇
      • 02-Spring篇(新版)
      • 03-SpringMVC篇
      • 04-MybatisPlus篇
    • 03-Java微服务
      • 01-SpringBoot篇
      • 01-SpringBoot篇(新版)
      • 02-SpringSecurity篇
      • 03-Shiro篇
      • 04-Swagger篇
      • 05-Zookeeper篇
      • 06-Dubbo篇
      • 07-SpringCloud篇
      • 08-SpringAlibaba篇
      • 09-SpringCloud篇(新版)
    • 04-Java中间件
      • 数据库篇
        • 01-分库分表概述
        • 02-MyCat篇
        • 03-MyCat2篇
        • 04-Sharding-jdbc篇
        • 05-ElasticSearch篇
      • 消息中间件篇
        • 01-MQ概述
        • 02-RabbitMQ篇
        • 03-Kafka篇
        • 04-RocketMQ篇
        • 05-Pulsar篇
    • 05-扩展篇
      • Dubbo篇
      • SpringBoot篇
      • SpringCloud篇
    • 06-第三方技术
      • 01-CDN技术篇
      • 02-POI技术篇
      • 03-第三方支付技术篇
      • 04-第三方登录技术篇
      • 05-第三方短信接入篇
      • 06-视频点播技术篇
      • 07-视频直播技术篇
    • 07-云原生
      • 01-Docker篇
      • 02-Kubernetes篇
      • 03-Kubesphere篇
  • Linux运维
    • 01-Linux篇
    • 02-Nginx篇
  • Python编程
    • 01-Python基础
      • 01.配置环境
      • 02.流程控制
      • 03.数值
      • 04.操作符
      • 05.列表
      • 06.元祖
      • 07.集合
      • 08.字典
      • 09.复制
      • 10.字符串
      • 11.函数
      • 12.常见内置函数
      • 13.变量
      • 14.异常和语法错误
      • 15.时间和日期
      • 16.正则表达式
    • 02 Python Web
      • flask篇
        • 01.前言
        • 02.路由
        • 03.模板
        • 04.视图进阶
        • 05.flask-sqlalchemy
        • 06.表单WTForms
        • 07.session与cookie
        • 08.上下文
        • 09.钩子函数
        • 10.flask 信号
        • 11.RESTFUL
        • 13.flask-mail
        • 14.flask+celery
        • 15.部署
        • 16.flask-login
        • 17.flask-cache
        • 18.flask-babel
        • 19.flask-dashed
        • 20.flask-pjax
        • 21.flask上传文件到第三方
        • 22.flask-restless
        • 23.flask-redis
        • 24.flask-flash
        • 25.消息通知
        • 26.分页
    • 03-Python数据分析
      • Matplotlib
      • Numpy
      • Pandas
      • Seaborn
    • 04-Python爬虫
      • 1.准备工作
      • 2.请求模块的使用
      • 3.解析模块的使用
      • 4.数据存储
      • 5.识别验证码
      • 6.爬取APP
      • 7.爬虫框架
      • 8.分布式爬虫
由 GitBook 提供支持
在本页
  • 创建字典
  • 访问字典元素
  • 修改字典
  • 删除字典
  • 返回所有键值对
  • 返回所有键
  • 返回所有值
  • 检查字典中是否存在键或值
  • 直接赋值和 copy 的区别

这有帮助吗?

在GitHub上编辑
  1. Python编程
  2. 01-Python基础

08.字典

什么是字典?

字典( dict )是一个复合数据类型,用于将其他值组合在一起。

dict(字典)类型是mapping(映像类型)的一个子类也是唯一一个子类,字典(dict)类型是一个可变数据类型,它的每一个元素都是一个键/值对(key,value)

创建字典

使用一对大括号创建一个字典

data = {
    "name":"angle",
    "number":1,
    123:123,
}

访问字典元素

  • 通过键值(key)访问元素

  • 当键(key)在字典中不存在的时候,会抛出一个KeyError错误

data = {
    "name":"angle",
    "number":1,
    123:123,
}

print(data['name'])

print(data['person'])


运行结果
-----------
angle

Traceback (most recent call last):
  File "E:/JetBrains/Code_practice_project/test/1.py", line 8, in <module>
    print(data['person'])
KeyError: 'person'
  • get(key[,default] )

    • 如果key在字典中,则返回key的值,否则返回default。 如果未给出default,则默认为None,因此此方法永远不会引发KeyError

data = {
    "name":"angle",
    "number":1,
    123:123,
}

print(data.get('name'))
print(data.get('person'))
print(data.get('person','没有这个值'))


运行结果
-----------
angle
None
没有这个值
  • setdefault(key[,default] )

    • 如果key在字典中,则返回其值。如果没有,插入钥匙 ,值为默认和返回默认值。 默认为 None。

data = {
    "name":"angle",
    "number":1,
    123:123,
}


print(data.setdefault('person','angle'))
print(data.get('person','没有这个值'))

运行结果
------------------
angle
angle

修改字典

  • 直接修改

  • 如果键值对不存在,会添加这个键值对的

data = {
    "name":"angle",
    "number":1,
    123:123,
}

data['name'] = 'miku'

print(data.get('name'))

运行结果
-----------
miku


data = {
    "number":1,
    123:123,
}

data['name'] = 'miku'
print(data.get('name')

运行结果
-----------
miku
  • update([other_dict])

    • 更新与来自键/值对字典等,覆盖现有的密钥。返回None

data = {
    "name":"miku",
    "number":1,
    123:123,
}

data.update({'name':'angle'})

print(data.get('name'))

运行结果
-----------
angle




data = {
    "number":1,
    123:123,
}

data.update({'name':'angle'})

print(data.get('name'))

运行结果
-----------
angle

删除字典

  • 使用del语句删除字典

data = {
"name":"miku",
"number":1,
123:123,
}

del data['name']

print(data.get('name'))

运行结果
-----------
None
  • pop(key[, default])

    • 如果key在字典中,则将其删除并返回其值,否则返回default。 如果未给出default并且key不在字典中,则引发KeyError。

data = {
"name":"miku",
"number":1,
123:123,
}

data.pop('name')

print(data.get('name'))

运行结果
-----------
None




data = {
"name":"miku",
"number":1,
123:123,
}

data.pop('person')

运行结果
----------------
Traceback (most recent call last):
  File "E:/JetBrains/Code_practice_project/test/1.py", line 8, in <module>
    data.pop('person')
KeyError: 'person'
  • clear()

    • 清除所有键值对

data = {
    "name":"miku",
    "number":1,
    123:123,
}

data.clear()
print(data.get('name'))


运行结果
-----------
None
  • popitem()

    • 删除字典的最后一个键值对

data = {
"name":"miku",
"number":1,
123:123,
}


data.popitem()
data.popitem()

print(data)

运行结果
-------------
{'name': 'miku'}

返回所有键值对

  • items()

    • 返回字典的所有键值对

data = {
"name":"miku",
"number":1,
123:123,
}

print(data.items())

for key,value in data.items():
    print("键:",key,"值:",value)


运行结果
------------
dict_items([('name', 'miku'), ('number', 1), (123, 123)])
键: name 值: miku
键: number 值: 1
键: 123 值: 123

返回所有键

  • keys()

    • 返回所有键

data = {
"name":"miku",
"number":1,
123:123,
}

print(data.keys())

for key in data.keys():
    print("键:",key)


运行结果
-----------------
dict_keys(['name', 'number', 123])
键: name
键: number
键: 123

返回所有值

  • values()

    • 返回所有值

data = {
"name":"miku",
"number":1,
123:123,
}

print(data.values())

for value in data.values():
    print("值:",value)


运行结果
-----------------------
dict_values(['miku', 1, 123])
值: miku
值: 1
值: 123

检查字典中是否存在键或值

可以使用in和not in操作符判断某个键或者值存在于字典中

>>> person = {"name":'miku','age':7}
>>> 'name' in person
True
>>> 'name' in person.keys()
True
>>> 'miku' in person.values()
True
>>> 'color' in person.keys()
False
>>> 'color' in person.values()
False

直接赋值和 copy 的区别

  • copy()

    • 返回字典的浅表副本。

可以通过以下实例说明:

dict1 =  {'user':'runoob','num':[1,2,3]}

dict2 = dict1          # 浅拷贝: 引用对象
dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用

# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)

# 输出结果
print(dict1)
print(dict2)
print(dict3)

实例中 dict2 其实是 dict1 的引用(别名),所以输出结果都是一致的,dict3 父对象进行了深拷贝,不会随dict1 修改而修改,子对象是浅拷贝所以随 dict1 的修改而修改。

{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'runoob'}
上一页07.集合下一页09.复制

最后更新于3年前

这有帮助吗?