九、python基础:数据容器(字典的创建和相关操作)
1、什么是字典
在python中,字典用英文dict表示,它用一个大括号包起来的,里面可以存放各种类型数据。但必须是以键值对的形式存在,键值对的个数没有限制,键值对之间使用逗号隔开,每个键值对中间都有一个冒号,冒号前面的是键key,冒号后面的是值value。
d = {'name':'xiaoming', 'skill': ['eat', 'run', 'study']}
像这个变量d,我们用一个字典赋值给它,字典中的“name”和“skill”就是它的键。“xiaoming”和列表[‘eat’, ‘run’, ‘study’]就是它的值。一个"name":‘xiaoming’,这样的组合就是一个键值对。
在字典中,键key和值value是成对出现的,有键就必须有值。
它通常用来表示一一对应的映射关系,这个怎么理解呢?举个例子
我们可以用一个字典来存放一个班级的学生信息
students = [
{'name':'小明', 'phone': '156XXXXXX', '成绩': 90},
{'name': '小红', 'phone': '185XXXXXXX', '成绩':95},
]
这样的结构其实是一个列表里面存放了2个字典,内部的每个字典都存放了一个学生的多个信息。
如果我们想要知道每个学生的姓名,我们只要把内部的每个字典都取出来,接着用键名"name"去从字典中取出值,就能知道对应学生的姓名是什么了。
演示一下:
这就是映射:只要使用’name’去取值,就一定能获取到对应一个姓名,用’phone’去取值,就一定能获取到对应的电话号码。
也是因此,在同一个字典中,键名是不能重复的。否则,你通过键名去取值的时候,解释器都不知道你要取的是哪一个。
并且你在定义的时候,如果有相同键名的,解释器只会使用最后一个键值对生成。
例如这个,字典中的2个键值对都使用了"name"作为键名,导致创建出来的字典,只有一个键值对。
2、字典的创建:
2.1、简单创建方法:
# 创建一个空字典,直接用大括号即可,也可以用内置方法dict()
d = {}
d = dict()
# 字典也可以存放各种类型的数据。
d = {'a': '1', 'b': '2', 'c': 1, 'd':1.2, 'e': (1, 2), 'f': [1, 2], 'g':{'a': '1'}}
2.2、较复杂的创建方法:
# 内置方法dict,搭配关键字参数创建
dict(a='a', b='b', t='t')
# 内置方法dict,搭配zip映射函数构建
dict(zip(['one', 'two', 'three'], [1, 2, 3]))
# 用可迭代对象创建,列表内嵌套元组
dict([('one', 1), ('two', 2), ('three', 3)])
演示结果:
2.3、自动批量创建(使用for循环结合占位符)
dict = {}
for i in range(5):
dict['第%d个'%i] = i
print(dict)
演示结果:
3、字典的常用操作:
我们操作字典经常用到的就是取出某个键对应的值
使用中括号,你要去哪个键的值就写对应的键名:
d = {'name':'小明', 'age':12, 'skill': ['eat', 'run', 'study']}
# 取出字典d中的键名name对应的值
d['name']
还有其他用到比较多的操作是:
修改某个值,新增键值对,统计字典的键值对个数,取出字典所有键,取出字典所有值,取出字典所有键值对
d = {'name':'小明', 'age':12, 'skill': ['eat', 'run', 'study']}
# 修改某个值(把名字改成小红)
d['name'] = '小红'
# 新增键值对(加个电话号码)
d['phone'] = '156xxxxxxx'
# 统计字典的键值对个数
len(d)
# 取出字典所有键
d.keys()
# 取出字典所有值
d.values()
# 取出字典所有键值对
d.items()
演示结果:
4、一些不常用的操作函数和方法
min(d) # 字典中键的最小值
max(d) # 字典中键的最大值
d.get(key, default) # 键存在则返回相应值,否则返回默认值
d.pop(key, default) # 键存在则返回相应值,并且删除该键值对,否则返回默认值
d.popitem() # 随机从字典中取出一个键值对,以元组形式返回
d.clear() # 删除所有键值对