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学习笔记(六)字典相关推荐

  1. Python学习笔记:字典(dict)

    Python学习笔记:字典(dict) 字典(dict)可能是最重要的Python内置数据结构,更常用的名称是哈希映射(hash map)或关联数组(associate array).它是键值对的集合 ...

  2. Python学习笔记六——画小猪佩奇

    目录 Python学习笔记六--画小猪佩奇 画布 画笔 属性设置 操纵命令 运动命令 画笔控制命令 全局控制命令 其他命令 Python学习笔记六--画小猪佩奇 使用Python的turtle库可以绘 ...

  3. Python学习笔记(六)

    1. IO编程 1.1 文件读写 1.2 StringIO和BytesIO 1.3 操作文件和目录 1.4 序列化 2. 进程和线程 2.1 多进程 2.2 多线程 2.3 ThreadLocal 2 ...

  4. Python学习笔记之字典(一)

    1.什么是字典:在Python中,字典是一系列键-值对.每个键都与一个值相关联,你可以使用键来访问与之相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典.事实上,可将任何Python对象用作字 ...

  5. Python学习笔记之字典(三)

    嵌套:有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套.你可以在列表中嵌套字典.在字典中嵌套列表甚至在字典中嵌套字典. 1.字典列表,一个列表里面包含多个字典,即列表中嵌套 ...

  6. Python学习笔记之字典(二)

    遍历字典:一个Python字典可能包含很多个键值对,在需要获取其数据时,就需要对这个进行遍历,Python支持对字典遍历.字典可用于以各种方式存储信息,其中有多种遍历字典的方式:可遍历字典的所有键值对 ...

  7. python学习笔记六 初识面向对象上(基础篇)

    python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性是继承. ...

  8. python学习笔记(字典)

    字典的使用 现实中的字段及在python中的字段都进行了构建,从而可以轻松查到某个特定的词语(键),从而找到它的意义(值). 某些情况下,字典比列表更加适用: # 表征游戏棋盘的状态,每个键都是由坐标 ...

  9. 【懒懒的Python学习笔记六】

    大多数程序旨在最终解决用户问题,为此通常需要从用户那里输入信息,在本章学习中,我们将学习Python的raw_input()函数接受用户输入以及学习while循环来控制程序的运行. 函数raw_inp ...

  10. python学习笔记六:Series

    Series是一种类似于一维数组的对象,由以下两部分组成: values:一组数据(ndarray或list类型) index:相关的数据索引标签 一维数组默认索引为0,1,2,3...,而Serie ...

最新文章

  1. struts2文件上传一个错误的解决
  2. nginx 升级http请求到websocket
  3. tikz 折线 箭头_问一个关于latex中,使用tikz画图的问题,如何使箭头上方的权值不居中(因为居中会互相重叠)...
  4. ajax post json php,ajax POST json对象给PHP,PHP怎么接收值
  5. [转]为什么mysql默认隔离级别设置为可重复读
  6. 洛谷 P2764(最小路径覆盖=节点数-最大匹配)
  7. 〖Linux〗zigbee实验之cc2430的cc debugger固件升级实录
  8. ListView控件简单用法
  9. 《产品经理面试攻略》PART 1:产品经理入门
  10. 美国国家安全局硬盘固件入侵技术揭秘
  11. erdas空间建模_ERDAS空间建模工具介绍
  12. 1194: 总成绩排序(结构体专题)
  13. 读书是走马观花还是咬文嚼字?
  14. windows10使用administrator登录后出现“无法使用内置管理员账户打开应用”的解决方法
  15. 建模实训报告总结_模型实训的心得体会
  16. python和access哪个好过计算机二级_大一考计算机二级,那考office、C语言、VB、Java、Access还是Python好呢?...
  17. js的event loop/js内存泄漏
  18. H3C交换机路由器配置命令大全
  19. unity 2d文字跟随主角移动_使用 Unity 粒子系统实现 2D 人物足迹效果
  20. MySQL空间函数——ST_AsText走过的坑

热门文章

  1. JavaScript系列学习笔记 —— 正则表达式以及JS和Java的写法区别
  2. Shader 能量法球特效
  3. 团队和技术建设的方法论
  4. 编程计算机程序设计员英语,编程用英语怎么说
  5. 服务器8g内存条显示只有7g,win7系统电脑8G内存只显示7.86G可用的解决方法
  6. SpringBoot (一) 入门、配置、自动配置源码剖析理解
  7. 语法错误 : 缺少“;”(在“”的前面)
  8. 自动点击微信c语言,【Ctrl.js】微信中给微信运动的朋友自动点赞源码
  9. 爬取简单网页图片下载到本地
  10. Python学习笔记(40)~10个随机分布的坐标点