字典的特点

  • 字典的所有元素都是一个 key-value ,通过指定的 key 总能映射到唯一确定的 value。字典中不能存在重复的key,但是可以存在重复的value
  • 字典中的元素是无序的。顺序不重要,重要的是key和value的映射关系
  • 字典中的 key 必须是不可变对象。存取字典中的 key-value,系统会调用内置函数 hash 根据指定的key 计算出value的存储位置,也就是哈希值。对于指定的key,为确保每次计算出的哈希值都是相同的,要求key必须是不可变对象,也就是说,只有不可变对象才存在哈希值。
  • 字典可以根据需要动态的伸缩,系统会根据需要动态的分配和回收内存,因此在使用前无须预先声明字典容量。
  • 字典会浪费较大内存,与列表相比,是用空间换取了时间

字典的创建

创建字典的常见方式有3种:

# 1、使用花括号
print({'name': 'Jack', 'age': 18})      # {'name': 'Jack', 'age': 18}# 空字典
print({})       # {}# 2、调用内置函数dict
print(dict({'name': 'Jack', 'age': 18}))    # {'name': 'Jack', 'age': 18}
print(dict(name='Jack', age=18))            # {'name': 'Jack', 'age': 18}
print(dict([('name', 'Jack'), ('age', 18)]))    # {'name': 'Jack', 'age': 18}
print(dict(zip(range(3), 'ABC')))           # {0: 'A', 1: 'B', 2: 'C'}# 空字典
print(dict())   # {}# 3、调用 dict 的方法 fromKeys
# 调用该方法时通过参数指定所有的key,所有value的默认值都是None
print(dict.fromkeys(['name', 'age']))       # {'name': None, 'age': None}
print(dict.fromkeys(('name', 'age')))       # {'name': None, 'age': None}# 调用该方法时,可以通过参数指定所有value的值
print(dict.fromkeys(['name', 'age'], 'N/A'))    # {'name': 'N/A', 'age': 'N/A'}

字典的 “查” 操作

# 1、使用中括号
d = {'name': 'Jack', 'age': 18}print(d['name'])        # Jack
# 如果字典中不存在指定的key,抛出 KeyError
# print(d['gender'])      # KeyError: 'gender'# 2、调用方法get
print(d.get('name'))    # Jack
# 如果字典中不存在指定的key,返回 None
print(d.get('gender'))  # None
# 调用get方法时可以通过参数指定默认 value,在key不存在时将其返回
print(d.get('gender', '男'))     # 男# 可以使用运算符 in (not in) 来检查字典中是否存在指定的 key
print('age' in d)       # True
print('gender' in d)    # False
print('gender' not in d)    # True

字典的 “改” 操作

# 1、为已经存在的 key 赋予一个 value 值,一次只修改一个key对应的value
d = {'name': 'Jack', 'age': 18, 'gender': '男'}d['age'] = 20
print(d)        # {'name': 'Jack', 'age': 20, 'gender': '男'}# 2、调用方法 update() ,第一至少修改一个key对应的value
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
d.update({'name': 'Mike', 'age': 20})
# d.update([('name', 'Mike'), ('age', 20)])
# d.update(name='Mike', age=20)
print(d)        # {'name': 'Mike', 'age': 20, 'gender': '男'}

字典的 “增” 操作

# 1、为不存在的key赋予一个value值,一次只添加一个key-value对
d = {'name': 'Jack', 'age': 18}d['gender'] = '男'
print(d)        # {'name': 'Jack', 'age': 18, 'gender': '男'}# 2、调用方法update,一次至少添加一个key-value对
d = {'name': 'Jack', 'age': 18}d.update({'gender': '男', 'score': 90})
d.update([('gender', '男'), ('score', 90)])
d.update(gender='男', score=90)
print(d)        # {'name': 'Jack', 'age': 18, 'gender': '男', 'score': 90}

字典的 “删” 操作

# 1、调用方法 pop ,一次只删除一个指定的key-value对
# 该方法返回指定的 key 对应的 value
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
print(d.pop('age'))     # 18
print(d)        # {'name': 'Jack', 'gender': '男'}# 如果指定的key不存在,抛出 KeyError
# d.pop('score')      # KeyError: 'score'# 为了防止指定的key不存在时抛出KeyError,我们可以通过参数指定一个默认返回的value
print(d.pop('score', 90))       # 90
print(d)        # {'name': 'Jack', 'gender': '男'}# 2、使用del语句 ,一次只删除一个指定的key-value对
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
del d['name']
print(d)        # {'age': 18, 'gender': '男'}# 3、调用方法 popitem()  ,一次只删除一个任意的 key-value对
# 该方法返回被删除的 key-value对
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
print(d.popitem())  # ('gender', '男')
print(d)        # {'name': 'Jack', 'age': 18}# 4、调用方法 clear 清空字典
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
d.clear()
print(d)    # {}

为字典中指定的key设置默认的value值

为了确保字典中指定的key总是存在,可以调用方法 setdefault,这样:如果字典中存在指定的key,返回指定的key对应的value,字典不发生变化;如果字典不存在指定的key,该方法返回指定的默认value值,字典中添加一个key-value对

d = {'name': 'Jack'}
print(d.setdefault('name', 'defaultName'))  # Jack
print(d)        # {'name': 'Jack'}print(d.setdefault('age', 18))  # 18
print(d)    # {'name': 'Jack', 'age': 18}

字典的视图

得到字典相关视图的3个方法:

  • keys:返回字典所有key的视图
  • values:返回字典所有value的视图
  • items:返回字典所有key-value对的视图
d = {'name': 'Jack', 'age': 18}keys = d.keys()
print(keys)         # dict_keys(['name', 'age'])
print(list(keys))   # ['name', 'age']values = d.values()
print(values)           # dict_values(['Jack', 18])
print(list(values))     # ['Jack', 18]items = d.items()
print(items)            # dict_items([('name', 'Jack'), ('age', 18)])
print(list(items))      # [('name', 'Jack'), ('age', 18)]# 视图会随字典的变化而变化
d.pop('age')
print(d)    # {'name': 'Jack'}print(list(keys))       # ['name']
print(list(values))     # ['Jack']
print(list(items))      # [('name', 'Jack')]

借助字典创建格式化字符串

# 1、使用百分号作为占位符phonebook = {'张三': 13333333333,'李四': 14444444444,'王五': 15555555555,'赵六': 16666666666}print('王五的号码:%s,张三的号码:%s' % (phonebook['王五'], phonebook['张三']))
# 王五的号码:15555555555,张三的号码:13333333333"""
当字符串中的占位符是百分号,并且占位符对应的实际值来自于某个字典的value时,可以把所有的实际值改写为字典,
同时根据字典的value对应的key在占位符%的后面添加:字典的key,
其中,字典的key会被添加一对引号。因此,如果字典的key是字符串,需要去掉字典的key自带的引号
"""
print('王五的号码:%(王五)s,张三的号码:%(张三)s' % phonebook)
# 王五的号码:15555555555,张三的号码:13333333333# 2、使用花括号作为占位符
print('王五的号码:{},张三的号码:{}'.format(phonebook['王五'], phonebook['张三']))
# 王五的号码:15555555555,张三的号码:13333333333
print('王五的号码:{王五},张三的号码:{张三}'.format_map(phonebook))
# 王五的号码:15555555555,张三的号码:13333333333

Python基础学习08-字典相关推荐

  1. Python基础学习之字典操作

    Python基础学习之字典操作 文章目录 Python基础学习之字典操作 1. 字典的创建 1.1 直接赋值法 1.2 关键字赋值法 1.3 列表转化法 1.4 元素增加法 1.5 元组转化法 1.6 ...

  2. Python基础学习之字典(自用)—henu.hjy

    通过学习菜鸟教程总结的一些易错及值得注意的地方,此处提前表明代码来源!!! 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象集合,字典是无序的对象集合 ...

  3. Python基础学习之字典(Dictionary)

    文章目录 1.什么是Python字典 2.创建Python字典 3.查询Python字典中的值 4.增加Python字典关键字与值 5.更新Python字典中的值 6.删除Python字典元素 7.P ...

  4. Python 基础学习 4 ——字典

    字典由大括号和键值对组成,特点为无序,键唯一 1.字典的创建 1 #直接创建字典 2 dic1={'name':a,'age':18} 3 #通过dict创建字典,输出都为{'name': 'a', ...

  5. 【Python基础学习】基本数据结构:列表、元组、栈、字典、集合与队列

    [Python基础学习]基本数据结构:列表.元组.栈.字典.集合与队列 Python的基本数据结构中,包含了列表.元组等一系列数组式数据结构,但各个结构各有不同.因此单独列出来,分析相同与不同 列表( ...

  6. python自学用什么书好-适合python基础学习的好书籍

    分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> 内容简介:本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用P ...

  7. python开发需要掌握哪些知识-Python基础学习需要掌握哪些知识

    1.1Python的对象 python的内置对象类型有很多,包括数字,字符串,列表,集合,元组,字典等等,在Python中,一切皆对象 pickle腌制--在Python中,如果有一些对象需要持久性存 ...

  8. Python基础学习-Python中最常见括号()、[]、{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho

    Python基础学习-Python中最常见括号().[].{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho ...

  9. python基础学习_转行零基础该如何学习python?很庆幸,三年前的我选对了

    这似乎是一个如荼如火的行业,对于一直在思考着转行的我,提供了一个不错的方向. 这个行业当然就是python程序员,真正开始决定转行是在24岁的时候,到现在已经有三年多了,我从零开始,每天用业余两个小时 ...

  10. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

最新文章

  1. 11.IDA-this指针
  2. linux查找替换grep以及正则表达式
  3. SAP CRM WebClient UI WebUI Runtime repository design
  4. 【APICloud系列|13】移动端适配通揽
  5. docker如何部署python项目_Docker如何部署Python项目的实现详解
  6. 初识OpenFlow协议
  7. php key sort,PHP中的sort(), rsort(),asort(),arsort(),ksort(),krsort()函数
  8. php中%3c w() %3e,DedeCMS V5.7 SP2后台存在代码执行漏洞
  9. 偶然遇到的Java泛型错误,百思不得其解。
  10. 计算最大子段(分治法)
  11. 【BZOJ2655】—calc(拉格朗日插值+生成函数+dp)
  12. 迅为IMX6ULL开发板Linux系统移植-NXP官方Linux源码编译
  13. excel小写转大写公式_不要眨眼!中英文、大小写转换,一秒就搞定!
  14. 解决:wordpress 安装主题时,要求FTP
  15. ABO血型系统遗传规律表
  16. PCL教程-PCLVisualizer可视化类的使用
  17. Vue项目打包部署到七牛CDN
  18. 用旭日图展示数据的三种方法
  19. Java、统计正数和负数的个数然后计算这些数的平均值
  20. 武林秘籍之C语言大法.第二式 语句 带你走向武林之巅

热门文章

  1. root不到怎么刷机,没有root如何刷机
  2. 从自媒体转做电商,实操店铺单月净利润4W+经验
  3. Tips:移动硬盘(U盘)中出现删不掉的文件夹,文件夹名是数字,删掉会变名字出现。
  4. Linux 服务器信息查看
  5. K8S 快速入门(一)虚拟化、容器化构建云计算平台的基本概念及原理解析
  6. 【CSON原创】 纯CSS图片放大浏览效果
  7. 使用布隆过滤器解决问题
  8. BP神经网络原理及实现
  9. Beta阶段——第2篇 Scrum 冲刺博客
  10. 你是编程中的“快枪手”还是“慢悠悠”?