python学习笔记(六)字典
python学习笔记(六)字典
1、字典初见
python中的字典实际上就是一系列的“键-值”对(key-value),它们之间时无序的,每一个键都必须有与之对应的值,这个值可以是任意python对象(数字、字符串、列表、字典等)。基本格式如下:
example = { #注意是使用花括号'key_0': value_0, #键与其对应值用冒号链接,键一般是字符串'key_1': value_1, #采用逗号分隔'key_2': value_2
} #键-值对的数量是任意的,但是必须相互对应
下面我想用通俗一点的语言来阐述一下我本人对字典的理解。首先我认为字典是列表的升级版,它只是为列表中的值附上了一个现实意义,每一个字典变量实际上是一个鲜明的个体,字典的键就是这个个体的属性,而键的对应值则是这个个体针对该属性具备的特有值。键与个体所属的种类有关,而值则与个体本身的特性有关,用于区分相同种类的不同个体,看下面的例子。
#这里创建两个学生,每个学生都有自己的学号、姓名、性别作为属性,但是不同的学生这三个属性的值不会全部相同(这里只是举个例子,两个不同的字典的键-值对是可以完全相同的)
student_0 = {'id': '01','name': 'Jack','gender': 'male','age': 18
}
student_1 = {'id': '02','name': 'Marry','gender': 'female','age': 17
}
重申,以上的例子只是为了方便大家理解字典,实际上这个例子是十分特殊的,大家在创建字典时一定要视情况而定。
2、访问字典的值
想要得到字典中特定键的对应值,只需要提供字典名和键即可,这里可以类比列表,只不过索引变成了键名。
student_0 = {'id': '01','name': 'Jack','gender': 'male','age': 18
}
student_0_name = student_0['name']
student_0_age = student_0['age']
print(student_0_name + " is " + str(student_0_age) + " years old.") #这里帮大家回忆一下数字和字符串的拼接
运行结果为:
Jack is 18 years old.
3、添加键-值对
字典与列表相同,都是一个动态的结构,这意味着我们可以根据需要随时增删字典中的键-值对。先来看添加键-值对,需要提供字典名、键名和其对应值。
student_0 = {'id': '01','name': 'Jack','gender': 'male','age': 18
}
print(student_0)
student_0['x_position'] = 1
student_0['y_position'] = 1
print(student_0)
运行结果为:
{'id': '01', 'name': 'Jack', 'gender': 'male', 'age': 18}
{'id': '01', 'name': 'Jack', 'gender': 'male', 'age': 18, 'x_position': 1, 'y_position': 1}
键-值对的排列顺序与添加顺序不一定相同,原因我在开头提过——字典中的键-值对是无序的。
注意:添加键-值对的操作对于“先创建一个空字典,再根据情况逐步完善字典”尤为重要(有时候是不得不这样做的,比如for循环批量创建字典)。
4、修改字典中的值
格式与添加键-值对类似,需要提供字典名、键名和其对应新值。
student_0 = {'id': '01','name': 'Jack','gender': 'male','age': 18
}
print(student_0)
student_0['gender'] = 'female'
print(student_0)
运行结果为:
{'id': '01', 'name': 'Jack', 'gender': 'male', 'age': 18}
{'id': '01', 'name': 'Jack', 'gender': 'female', 'age': 18}
修改字典中的值是一个十分重要的操作,它使得我们的对象能够“活过来”,具有生命。这句话,你品,你细品!这里的例子我也保留,上一篇提到过后面想用python写一个小游戏,到时候应该有机会。
5、删除键-值对
del语句为我们提供永久删除键-值对的功能。需要提供字典名和键名,这样该字典中的目标键及其对应值就可以被永久性删除。
student_0 = {'id': '01','name': 'Jack','gender': 'male','age': 18
}
print(student_0)
del student_0['gender']
print(student_0)
运行结果为:
{'id': '01', 'name': 'Jack', 'gender': 'male', 'age': 18}
{'id': '01', 'name': 'Jack', 'age': 18}
6、字典的另一种用法
在之前举的例子中我都是用字典存储同一个对象(学生)的多种信息(学号、姓名、性别、年龄等),实际上,字典也可以用来存储多个对象的同种信息。
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
7、遍历字典
遍历字典分为三种:
A 遍历字典的键-值对
B 遍历字典的键
C 遍历字典的值
下面我们一个一个来看。
A 遍历字典的键-值对
当我们提到遍历时,首先想到的应该就是之前讲过的for循环。我们先看基本格式格式:
example = {'key_0': value_0,'key_1': value_1,'key_2': value_2
}for key, value in example.items():do something
首先我们注意到,由于键-值对是一对量,所以我们需要两个变量来进行存储(这里的key和value是两个变量名,也可以根据需要选取其他的)。其次,要想遍历字典,必须调用 .item() 函数,因为这个函数可以为我们返回一个键-值对列表。
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
print(favorite_language.items())
运行结果为:
dict_items([('Jack', 'python'), ('Marry', 'c'), ('John', 'java'), ('Max', 'ruby')])
下面看遍历的例子:
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
for name, language in favorite_language.items():print(name + " likes " + language + " best!")
print("Over!")
运行结果为:
Jack likes python best!
Marry likes c best!
John likes java best!
Max likes ruby best!
Over!
B 遍历字典的键
在遍历键时,我们需要一个新的函数—— .keys()
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
print(favorite_language.keys())
相信大家明白它和 .items() 函数的区别在哪里,运行结果为:
dict_keys(['Jack', 'Marry', 'John', 'Max'])
下面看遍历的例子:
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
for name in favorite_language.keys():print(name)
print("Over!")
运行结果为:
Jack
Marry
John
Max
Over!
通常情况下我们选择使用 .keys() 是因为它可以返回键的列表,这方便我们进行其他的操作,实际上,也可以直接这样做:
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
for name in favorite_language:print(name)
print("Over!")
虽然省略了 .keys() 函数,但是结果是一样的。个人并不建议省略,因为我觉得这样显示的表达会更方便理解。
这里我还想介绍一个 sorted() 函数,这个函数可以将 .key() 函数返回的键列表按字典序排序(因为键-值对是无序的),有时候,这个操作很有必要。
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
for name in sorted(favorite_language.keys()):print(name)
print("Over!")
运行结果为:
Jack
John
Marry
Max
Over!
C 遍历字典的值
不用说,我相信大家已经猜到了这个函数—— .values(),返回值列表。
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby'
}
print(favorite_language.values())
运行结果为:
dict_values(['python', 'c', 'java', 'ruby'])
——————————————————————————————
这里我想讲一个很有用的函数——set(),去重函数。看一个例子:
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby','Mike': 'python'
}
print(favorite_language.values())
print(set(favorite_language.values()))
运行结果为:
dict_values(['python', 'c', 'java', 'ruby', 'python'])
{'c', 'python', 'ruby', 'java'}
注意这里的运行结果,是提取出列表中的元素,生成一个不含重复元素的集合。
————————————————————————————————
下面看遍历的例子:
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby','Mike': 'python'
}
for language in favorite_language.values():print(language)
print("Over!")
运行结果为:
python
c
java
ruby
python
Over!
同时,这里的 .value() 函数与 .keys() 不同,是不可省略的。否则:
favorite_language = {'Jack': 'python','Marry': 'c','John': 'java','Max': 'ruby','Mike': 'python'
}
for language in favorite_language:print(language)
print("Over!")
运行结果为:
Jack
Marry
John
Max
Mike
Over!
相信大家已经明白了省略的含义。
8、嵌套
在这里我还想简单的提一下嵌套的概念,实际上就是列表和字典的组合。通常情况下有三种(这里简单的举一些例子,具体的使用还需要大家根据情况自行判断):
A 字典列表
student_0 = {'id': '01','name': 'Jack','gender': 'male','age': 18
}
student_1 = {'id': '02','name': 'Marry','gender': 'female','age': 17
}
student_2 = {'id': '03','name': 'John','gender': 'male','age': 19
}
students = [student_0, student_1, student_2]
for student in students:print(student)
运行结果为:
{'id': '01', 'name': 'Jack', 'gender': 'male', 'age': 18}
{'id': '02', 'name': 'Marry', 'gender': 'female', 'age': 17}
{'id': '03', 'name': 'John', 'gender': 'male', 'age': 19}
字典列表是为了方便管理同种类字典。
B 在字典中存储列表
favorite_languages = {'Jack': ['python', 'c++'],'Marry': ['c'],'John': ['java', 'c'],'Max': ['ruby', 'java']
}
字典中存储列表是因为有时候一个键不止对应一个值。
C 在字典中存储字典
students = {'Jack': {'id': '01','gender': 'male','age': 18},'Marry': {'id': '02','gender': 'female','age': 17},'John': {'id': '03','gender': 'male','age': 19}
}
for student_name, student_info in students.items():print(student_name + "'s information:")print(student_info)print()
print("Over!")
运行结果为:
Jack's information:
{'id': '01', 'gender': 'male', 'age': 18}Marry's information:
{'id': '02', 'gender': 'female', 'age': 17}John's information:
{'id': '03', 'gender': 'male', 'age': 19}Over!
这样做同样也可以方便管理,但是代码会变得十分复杂,事实上,在初学阶段,一般不怎么需要用到嵌套,等到熟练之后,自然而然地就会根据需要自行引入嵌套了。
python学习笔记(六)字典相关推荐
- Python学习笔记:字典(dict)
Python学习笔记:字典(dict) 字典(dict)可能是最重要的Python内置数据结构,更常用的名称是哈希映射(hash map)或关联数组(associate array).它是键值对的集合 ...
- Python学习笔记六——画小猪佩奇
目录 Python学习笔记六--画小猪佩奇 画布 画笔 属性设置 操纵命令 运动命令 画笔控制命令 全局控制命令 其他命令 Python学习笔记六--画小猪佩奇 使用Python的turtle库可以绘 ...
- Python学习笔记(六)
1. IO编程 1.1 文件读写 1.2 StringIO和BytesIO 1.3 操作文件和目录 1.4 序列化 2. 进程和线程 2.1 多进程 2.2 多线程 2.3 ThreadLocal 2 ...
- Python学习笔记之字典(一)
1.什么是字典:在Python中,字典是一系列键-值对.每个键都与一个值相关联,你可以使用键来访问与之相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典.事实上,可将任何Python对象用作字 ...
- Python学习笔记之字典(三)
嵌套:有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套.你可以在列表中嵌套字典.在字典中嵌套列表甚至在字典中嵌套字典. 1.字典列表,一个列表里面包含多个字典,即列表中嵌套 ...
- Python学习笔记之字典(二)
遍历字典:一个Python字典可能包含很多个键值对,在需要获取其数据时,就需要对这个进行遍历,Python支持对字典遍历.字典可用于以各种方式存储信息,其中有多种遍历字典的方式:可遍历字典的所有键值对 ...
- python学习笔记六 初识面向对象上(基础篇)
python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性是继承. ...
- python学习笔记(字典)
字典的使用 现实中的字段及在python中的字段都进行了构建,从而可以轻松查到某个特定的词语(键),从而找到它的意义(值). 某些情况下,字典比列表更加适用: # 表征游戏棋盘的状态,每个键都是由坐标 ...
- 【懒懒的Python学习笔记六】
大多数程序旨在最终解决用户问题,为此通常需要从用户那里输入信息,在本章学习中,我们将学习Python的raw_input()函数接受用户输入以及学习while循环来控制程序的运行. 函数raw_inp ...
- python学习笔记六:Series
Series是一种类似于一维数组的对象,由以下两部分组成: values:一组数据(ndarray或list类型) index:相关的数据索引标签 一维数组默认索引为0,1,2,3...,而Serie ...
最新文章
- struts2文件上传一个错误的解决
- nginx 升级http请求到websocket
- tikz 折线 箭头_问一个关于latex中,使用tikz画图的问题,如何使箭头上方的权值不居中(因为居中会互相重叠)...
- ajax post json php,ajax POST json对象给PHP,PHP怎么接收值
- [转]为什么mysql默认隔离级别设置为可重复读
- 洛谷 P2764(最小路径覆盖=节点数-最大匹配)
- 〖Linux〗zigbee实验之cc2430的cc debugger固件升级实录
- ListView控件简单用法
- 《产品经理面试攻略》PART 1:产品经理入门
- 美国国家安全局硬盘固件入侵技术揭秘
- erdas空间建模_ERDAS空间建模工具介绍
- 1194: 总成绩排序(结构体专题)
- 读书是走马观花还是咬文嚼字?
- windows10使用administrator登录后出现“无法使用内置管理员账户打开应用”的解决方法
- 建模实训报告总结_模型实训的心得体会
- python和access哪个好过计算机二级_大一考计算机二级,那考office、C语言、VB、Java、Access还是Python好呢?...
- js的event loop/js内存泄漏
- H3C交换机路由器配置命令大全
- unity 2d文字跟随主角移动_使用 Unity 粒子系统实现 2D 人物足迹效果
- MySQL空间函数——ST_AsText走过的坑
热门文章
- JavaScript系列学习笔记 —— 正则表达式以及JS和Java的写法区别
- Shader 能量法球特效
- 团队和技术建设的方法论
- 编程计算机程序设计员英语,编程用英语怎么说
- 服务器8g内存条显示只有7g,win7系统电脑8G内存只显示7.86G可用的解决方法
- SpringBoot (一) 入门、配置、自动配置源码剖析理解
- 语法错误 : 缺少“;”(在“”的前面)
- 自动点击微信c语言,【Ctrl.js】微信中给微信运动的朋友自动点赞源码
- 爬取简单网页图片下载到本地
- Python学习笔记(40)~10个随机分布的坐标点