Python基础学习08-字典
字典的特点
- 字典的所有元素都是一个 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-字典相关推荐
- Python基础学习之字典操作
Python基础学习之字典操作 文章目录 Python基础学习之字典操作 1. 字典的创建 1.1 直接赋值法 1.2 关键字赋值法 1.3 列表转化法 1.4 元素增加法 1.5 元组转化法 1.6 ...
- Python基础学习之字典(自用)—henu.hjy
通过学习菜鸟教程总结的一些易错及值得注意的地方,此处提前表明代码来源!!! 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象集合,字典是无序的对象集合 ...
- Python基础学习之字典(Dictionary)
文章目录 1.什么是Python字典 2.创建Python字典 3.查询Python字典中的值 4.增加Python字典关键字与值 5.更新Python字典中的值 6.删除Python字典元素 7.P ...
- Python 基础学习 4 ——字典
字典由大括号和键值对组成,特点为无序,键唯一 1.字典的创建 1 #直接创建字典 2 dic1={'name':a,'age':18} 3 #通过dict创建字典,输出都为{'name': 'a', ...
- 【Python基础学习】基本数据结构:列表、元组、栈、字典、集合与队列
[Python基础学习]基本数据结构:列表.元组.栈.字典.集合与队列 Python的基本数据结构中,包含了列表.元组等一系列数组式数据结构,但各个结构各有不同.因此单独列出来,分析相同与不同 列表( ...
- python自学用什么书好-适合python基础学习的好书籍
分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> 内容简介:本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用P ...
- python开发需要掌握哪些知识-Python基础学习需要掌握哪些知识
1.1Python的对象 python的内置对象类型有很多,包括数字,字符串,列表,集合,元组,字典等等,在Python中,一切皆对象 pickle腌制--在Python中,如果有一些对象需要持久性存 ...
- Python基础学习-Python中最常见括号()、[]、{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho
Python基础学习-Python中最常见括号().[].{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho ...
- python基础学习_转行零基础该如何学习python?很庆幸,三年前的我选对了
这似乎是一个如荼如火的行业,对于一直在思考着转行的我,提供了一个不错的方向. 这个行业当然就是python程序员,真正开始决定转行是在24岁的时候,到现在已经有三年多了,我从零开始,每天用业余两个小时 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
最新文章
- 11.IDA-this指针
- linux查找替换grep以及正则表达式
- SAP CRM WebClient UI WebUI Runtime repository design
- 【APICloud系列|13】移动端适配通揽
- docker如何部署python项目_Docker如何部署Python项目的实现详解
- 初识OpenFlow协议
- php key sort,PHP中的sort(), rsort(),asort(),arsort(),ksort(),krsort()函数
- php中%3c w() %3e,DedeCMS V5.7 SP2后台存在代码执行漏洞
- 偶然遇到的Java泛型错误,百思不得其解。
- 计算最大子段(分治法)
- 【BZOJ2655】—calc(拉格朗日插值+生成函数+dp)
- 迅为IMX6ULL开发板Linux系统移植-NXP官方Linux源码编译
- excel小写转大写公式_不要眨眼!中英文、大小写转换,一秒就搞定!
- 解决:wordpress 安装主题时,要求FTP
- ABO血型系统遗传规律表
- PCL教程-PCLVisualizer可视化类的使用
- Vue项目打包部署到七牛CDN
- 用旭日图展示数据的三种方法
- Java、统计正数和负数的个数然后计算这些数的平均值
- 武林秘籍之C语言大法.第二式 语句 带你走向武林之巅