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!

这样做同样也可以方便管理,但是代码会变得十分复杂,事实上,在初学阶段,一般不怎么需要用到嵌套,等到熟练之后,自然而然地就会根据需要自行引入嵌套了。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值