字典
字典的概述:
字典是一个无序的,可以修改的,元素呈键值对的形式,以逗号分割的,以大括号包围的数据类型;
字典和列表一样,可以存储多个数据,但是字典中的值并没有什么特殊顺序;列表中,查找某个元素时,是通过下标进行的,但是如果下标很多,查找元素不方便,这时就需要用到字典。
字典的每个元素由两部分组成,键:值。例如:‘name’:‘hu’ , name为键,hu为值。
字典是Python基础数据类型当中唯一一个映射关系的数据类型;
先来定义一个字典:
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
在定义的字典中,每一个键对应一个相应的值,那么键与值是不是只能一对一呢?可以试着看下:
message = {'name':'jake','hu','age':19,'love':'kongfu'}#在键name后面加上'hu',使其对应两个值
print(message)
看结果:
File "<ipython-input-4-39b28704af5a>", line 1
message = {'name':'jake','hu','age':19,'love':'kongfu'}#在键name后面加上'hu',使其对应两个值
^
SyntaxError: invalid syntax
SyntaxError: invalid syntax语法错误,是一种编译错误,python编译器在处理的时候,发现语法不规范,发出编译错误。所以,这样看来,键与值是一一对应的关系,键后面只能有一个值,但是这个值可以是字符串,可以是数字,那么是否可以为列表,元组呢?
实践是检验真理的唯一标准,话不多说,上代码:
message = {'name':['jake','hu'],'age':19,'love':'kongfu'}#在键后面用列表来存储值,这样在列表中就可以存储多个’值‘
print(message)
{'name': ['jake', 'hu'], 'age': 19, 'love': 'kongfu'}
如果将元组放在值的位置,同样会报错,具体原因这里不做阐述。
获取字典中元素
- 利用键名
字典中的元素都是通过键名来访问的,当我们想要获取某一个值,只需要指出对应的键名,就可以得到相应的值。例如:
message = {'name':'jake','age':19,'love':'kongfu'}
print(message['name'])
print(message['age'])
jake
19
- get方法
例如:通过get()函数来对字典中值进行查找
message = {'name':'jake','age':19,'love':'kongfu'}
print(message.get('name'))
print(message.get('age'))
print(message.get('favorite'))#注意:get方法如果没有找到相应的值,就会输出None,后面也可以带默认的值。
jake
19
None
字典中元素的添加修改
在字典中,想要添加键值对,采用直接添加的方式,直接将键和值定义在这个字典中就可以了。例如:
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
message['height'] = 182
print(message)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
{'name': 'jake', 'age': 19, 'love': 'kongfu', 'height': 182}
修改字典中的值也是直接指出键名,然后将新的值赋给这个键名就可以了。例如:
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
message['age'] = 21
print(message)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
{'name': 'jake', 'age': 21, 'love': 'kongfu'}
字典中元素的删除
- 字典中对键值对的删除,是用del进行直接删除
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
del message['age']
print(message)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
{'name': 'jake', 'love': 'kongfu'}
- pop(),弹出,返回并删除对应指定键的值
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
num = message.pop('age')#弹出,并删除指定键的值
print(num)
print(message)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
19
{'name': 'jake', 'love': 'kongfu'}
- 随机弹出一个键值元组(随机的原因是因为字典无序)
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
num = message.popitem()#随机弹出一个键值元组
print(num)
print(message)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
('love', 'kongfu')
{'name': 'jake', 'age': 19}
- clear 清空字典
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
message.clear()
print(message)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
{}
Python字典的特点
- 字典是无序的,所以字典没有索引值;
- 字典没有索引值,所以字典以键取值,(字典的键相当于列表的索引);
- 字典以键取值,所以字典的键唯一且不可修改;
- 字典的键不可修改,所以列表和字典等可变类型的数据不可以给字典做键。
字典中的一些常见操作
message = {'name':'jake','age':19,'love':'kongfu'}
print(message.keys())#返回一个包含字典所有key的列表
print(message.values())#返回一个包含字典所有value的列表
#设置默认,如果键存在,返回值,如果键不存在,创造键,值默认为None,值也可以自定义setdefault(key,default=None)
print(message.setdefault('play'))
#以字典的格式更新指定键内容,若不存在,则创建键和值
print(message.update({'play':'pingpang'}))
print(message)
print(message.items())#返回字典的键值以元组的方式
#测量字典,键值对的个数
print(message)
print(len(message))#测量字典,键值对的个数
dict_keys(['name', 'age', 'love'])
dict_values(['jake', 19, 'kongfu'])
None
None
{'name': 'jake', 'age': 19, 'love': 'kongfu', 'play': 'pingpang'}
dict_items([('name', 'jake'), ('age', 19), ('love', 'kongfu'), ('play', 'pingpang')])
{'name': 'jake', 'age': 19, 'love': 'kongfu', 'play': 'pingpang'}
4
如何判断一个值是否再字典中?如下:
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
```python
#判断指定的键是否在字典当中,在,返回True,否则,返回False
'name' in message
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
True
字典的遍历 通过for … in …:的语法结构,我们可以遍历字符串、列表、元组、字典等数据结构。例如:
message = {'name':'jake','age':19,'love':'kongfu'}
print(message)
for i in message:#遍历键
print(i)
for j in message.values():#遍历值
print(j)
{'name': 'jake', 'age': 19, 'love': 'kongfu'}
name
age
love
jake
19
kongfu
集合
集合的定义:集合是一种无序不重复的元素集合,集合与之前元素列表类似,可以存储多个数据,但是这些数据是不重复的。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合对象还支持交集(intersection),差集(difference)、并集和对称差集(sysmmetric_difference)
s1 = {1,2,3,4,5,5}#创建一个集合
print(s1)#通过打印可以看出集合里面没有相同的元素
s2 = set('34567')#通过set()函数创建集合,无序
s3 = set('1234')
print(s2)
print(s3)
#集合还支持交集,差集,并集和对称差集
print(s2&s3)#交集:&两个集合的公共部分
print(s2|s3)#并集:|两集合合并,没有重复元素
print(s2-s3)#差集:-只有前项有的元素,不存在后项中的元素。
print(s2^s3)#对称差集(^):只存在a或者b中,但是不会同时出现在二者中
type(s1)#查看数据类型
{1, 2, 3, 4, 5}
{'6', '7', '5', '4', '3'}
{'4', '1', '3', '2'}
{'4', '3'}
{'6', '1', '7', '2', '5', '4', '3'}
{'5', '6', '7'}
{'6', '7', '2', '5', '1'}
set
集合的增添删除操作
s1 = {1,2,3,4,5}
print(s1)
# add(),为集合无规律添加元素
s1.add('jk')
print(s1)
# update()也可以添加元素,且参数可以是不同类型,并用逗号分隔开
s1.update('8','9',[6,7])#不能直接加int类型,否则报错
print(s1)
#remove(),删除集合中的指定元素,当指定的元素不存在的时候会报错
s1.remove(1)
print(s1)
#discard(),是删除集合中的指定元素,且如果元素不存在的时候,不会报错
s1.discard('jk')
s1.discard('aj')
print(s1)
#pop(),无逻辑删除元素
s1.pop()
print(s1)
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5, 'jk'}
{1, 2, 3, 4, 5, 'jk', '8', 6, 7, '9'}
{2, 3, 4, 5, 'jk', '8', 6, 7, '9'}
{2, 3, 4, 5, '8', 6, 7, '9'}
{3, 4, 5, '8', 6, 7, '9'}
以上就是关于集合与字典的一些日常基本操作了。