0
点赞
收藏
分享

微信扫一扫

Python的字典和集合的基本使用

女侠展昭 2022-01-16 阅读 71

字典的基本使用和方法

一、字典的定义

(1)字典:用{}来标识
(2)字典的结构:就是将它看做作是一个{key:value},键:值对的集合,
(3)包含两个元素用“,”间隔,每个元素是用 键key和值value组成的,中间用“:”间隔
(4)同一个字典中的key是唯一的(不能存在重复的key)
(5)字典中的key只能是不可变类型的数据(数值、字符串、元组),通常 都是使用字符串;
(6)当存在相同key时,不会报错,但只会输出最后一个key
(7)value:字典中的value可以保存任何类型的数据
(8)空字典:{}

二、字典的定义方式

方式一:使用“:”

dic = {'name': '逍遥', 'age': 18}

方式二:不使用“:”

dic = dict(name = '逍遥',
           age = 18,
           name1 = '向日葵')
print(dic)

运行结果:{‘name’: ‘逍遥’, ‘age’: 18, ‘name1’: ‘向日葵’}

方式三:将多个元组,快速的转换成字典

dic = dict(
    [('name','逍遥'),('age',18),('name1','向日葵')]
)
print(dic)

运行结果:{‘name’: ‘逍遥’, ‘age’: 18, ‘name1’: ‘向日葵’}

三、字典的操作方法(增删查改)

1、添加操作:通过键直接进行赋值

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
dic['name3'] = '小白'
print(dic)

运行结果:{‘name’: ‘xiaoyao’, ‘name1’: ‘cmq’, ‘name2’: ‘FENG’, ‘name3’: ‘小白’}

注意点:

1)字符串、列表、元组,支持下标操作,可以下标取值和切片
2)字典是不支持下标取值和切片

2、修改操作:通过键直接进行赋值

# 无则增,有则改;字典是无顺序的
dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
dic['name'] = '女子'
print(dic)

运行结果:{‘name’: ‘女子’, ‘name1’: ‘cmq’, ‘name2’: ‘FENG’}

3、查询操作

方式一:直接通过键去获取,该方法如果键不存在,会报keyerror

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
print(dic['name'])

运行结果:xiaoyao

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
print(dic['111'])

运行结果:KeyError: ‘111’(通过key去获取值,没有键报错keyerror)

方式二:get 直接通过键去获取,如果键不存在,返回None(None:空)

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
print(dic.get('name'))

运行结果:xiaoyao

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
print(dic.get('111'))

运行结果:None

4、删除操作

方式一:pop 通过指定键删除对应的键值对

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
dic.pop('name')
print(dic)

运行结果:{‘name1’: ‘cmq’, ‘name2’: ‘FENG’}

方法二:popitem 删除最近一个添加的键值对(3.5以前的python是随机的)

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
print(dic.popitem())
print(dic)

运行结果:(‘name2’, ‘FENG’)
{‘name’: ‘xiaoyao’, ‘name1’: ‘cmq’}

方法三:del 关键字进行删除

dic={'ee':14,"jj":22,"kk":33}
del dic['jj']
print(dic)

运行结果:{‘ee’: 14, ‘kk’: 33}

方法四:clear 清空字典

dic = {'name':'xiaoyao','name1':'cmq','name2':'FENG'}
dic.clear()
print(dic)

运行结果:{}

四、字典的其他方法

1、keys():获取字典中所有的键

# dict_keys是字典里的数据类型,不是python常用的数据类型,可以转换成列表打印出来
dic = {'name':"逍遥",'age':18,'sex':"男"}
res1 = dic.keys()
print(res1)
print(list(res1))

运行结果:dict_keys([‘name’, ‘age’, ‘sex’])
[‘name’, ‘age’, ‘sex’]

2、values():获取字典中所有的值

dic = {'name':"逍遥",'age':18,'sex':"男"}
res2 = dic.values()
print(list(res2))

运行结果:[‘逍遥’, 18, ‘男’]

3、items():经常使用到:获取字典的键值对(每个键值对会转换为一个元组)

"""
生成的数据类型是 列表嵌套元组,每一个元组都是字典的键值对,
字典的键是元组的第一个元素,字典的值是元组的第二个元素;
"""
dic = {'name':"逍遥",'age':18,'sex':"男"}
res3 = dic.items()
print(list(res3))

运行结果:[(‘name’, ‘逍遥’), (‘age’, 18), (‘sex’, ‘男’)]

4、update():往字典中添加多个键值对(把一个字典添加到另一个字典中)

"""
1、如果字典中存在重复的键,后进来的会把前边的覆盖掉
2、无则增有则改
3、该方法类似于extend方法,往列表中添加多个元素
"""
dic = {'name':"逍遥",'age':18,'sex':"男"}
dic.update({'aa':11,'bb':22,'cc':22})
print(dic)

运行结果:{‘name’: ‘逍遥’, ‘age’: 18, ‘sex’: ‘男’, ‘aa’: 11, ‘bb’: 22, ‘cc’: 22}

集合的基本使用

一、集合的定义

定义:花括号或者set()函数可以用来创建集合。
集合中的数据只能是不可变类型:数值 字符串 元组(其它类型会报错)
注意:要创建一个空集合只能有set()而不能用{},因为后者是创建一个空字典

二、集合的方法

1)添加元素:add

set2 = {11,22}
set2.add(999)
set2.add(100)
print(set2)

运行结果:{11, 100, 22, 999}

2)删除元素:remove

set2 = {11,22}
set2.remove(11)
print(set2)

运行结果:{22}

三、集合的特性

1)集合中的元素是无序的

# 打印出的内容与定义的不一样,没有顺序,无法“切片”和“索引取值”
set2 = {11,2222,33,3333,'aa','bb','逍遥'}
print(set2)

运行结果:{33, 3333, ‘逍遥’, 11, ‘aa’, 2222, ‘bb’}

2)集合中的元素不能重复(和数学中的集合一样的)

# 运行后相同的元素只会保留一个
set2 = {11,11,2222,33,3333,11,22,33,11,22,22,'aa','bb','逍遥'}
print(set2)

运行结果:{33, 3333, 11, 2222, ‘逍遥’, ‘aa’, 22, ‘bb’}

#集合和字典是无序的
# hash算法加密,按对应规则进行存储
# 字典是对key进行hash
# 集合中是直接对集合中的数据进行hash
# 只有不可变类型的数据才能进行hash

四、集合特性的用法

快速去除列表中重复的元素

# 通过集合可以去除列表中的重复元素
li1=[11,222,11,22,11,222,33]
print("原来的li1:")
print(li1)

# 1.先将列表转换为集合
s=set(li1)
print("1.先将列表转换为集合:")
print(s)

# 2.然后再把集合转换为列表
li2=list(s)
print("2.然后再把集合转换为列表:")
print(li2)

运行结果:
原来的li1:
[11, 222, 11, 22, 11, 222, 33]
1.先将列表转换为集合:
{33, 11, 222, 22}
2.然后再把集合转换为列表:
[33, 11, 222, 22]

数据类型总结

1.按数据结构分类
(1)数值类型:整数 浮点数 布尔值
(2)序列类型:字符串 列表 元组
(3)散列类型:字典 集合
2.数据类型的可变不可变
不可变类型:数值类型 字符串 元组
字符串和元组定义后不能修改内部结构或者值(内在单元中值为不可变类型)
可变类型:列表、字典、集合
如何区分可变和不可变类型:定义一个集合,把数据放到集合中看不会报错
1、打印报错,就是可变类型;
2、打印不报错,就是不可变类型;
3、集合中只能存在不可变类型的数据;

set1 = {[1,2,3],[1,2]}               # 集合中是列表
print(set1)

运行结果:TypeError: unhashable type: ‘list’

set2 = {{'Name':'逍遥'},{'Age':18}}    # 集合中是字典
print(set2)

运行结果:TypeError: unhashable type: ‘dict’

set3 = {{1,2,3},{1,2}}               # 集合中是集合
print(set3)

运行结果:TypeError: unhashable type: ‘set’

set4 = {1,2,3,4,5}                  # 集合中是数值
print(set4)
set5 = {'sdda','asddd','ssaaa'}        # 集合中是字符串
print(set5)
set6 = {(1,2,3),(1,2,3,4)}           # 集合中是元组
print(set6)

运行结果:{1, 2, 3, 4, 5}
{‘asddd’, ‘sdda’, ‘ssaaa’}
{(1, 2, 3, 4), (1, 2, 3)}

举报

相关推荐

0 条评论