8. Python的数据类型⑤⑥——字典和集合


Python的数据类型


1 集合

1.1 集合是什么

集合用一对花括号定义,集合中的每个元素必须是独一无二的


1.1 创建一个集合

houses={'Gryffindor','Slytherin','Hufflepuff','Ravenclaw'}
print(houses)
----------
{'Hufflepuff', 'Slytherin', 'Ravenclaw', 'Gryffindor'}

2 字典是什么

一个字典名为「houses_0」的字典,储存了霍格沃兹格兰芬多学院的详细信息的字典

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}
print(houses_0['color'])
print(houses_0['name'])
----------
red
Gryffindor
  • 在Python中,字典是由放在花括号内「{ }」的键值对组成的
  • 每个都与一个相关联,可以使用键来访问值
  • 用冒号分隔;用逗号分隔
  • 在Python中,可以是任何对象


    在本例中有三个键值对:
    键「name」——————值「Gryffindor」
    键「representation」——值「lion」
    键「color」 ——————值「红色」


    字典储存的是一个对象(霍格沃兹的某个学院)的多种信息(name、representation、color)
    也可以使用字典存储很多对象(霍格沃兹的四个学院)的同一个信息(代表色)
colors={'Gryffindor':'red',
		'Slytherin':'green',
		'Hufflepuff':'yellow',
		'Ravenclaw':'blue'}
print(f"莱文克劳学院的代表色为{colors['Ravenclaw']}")
----------
莱文克劳学院的代表色为blue

▶ 注:区分字典集合,他们都是由一对花括号定义的
▶ 花括号内没有键值对,那就是集合
▶ 集合不同于列表和字典,它不会以特定的顺序存储元素


3 字典的操作

3.1 创建一个空字典

houses_0={}

3.2 查:访问字典中的值

方法1:使用方括号

要获取与键相关联的值,则需依次指定字典名和键,键放在方括号内

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}
print(houses_0['color'])     ###
----------
red

▶ 注:使用该方法,当字典中没有指定的键的信息时,会报错


方法2:使用方法get()

使用方法get(),括号内第一个参数为要查找的键,第二个参数为查找的键不存在时返回的值

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

name=houses_0.get('name')     #####
print(name)

mood=houses_0.get('斯内普教授的心情','今天斯内普教授的心情未知')     #####
print(mood)
----------
Gryffindor
今天斯内普教授的心情未知

3.3 增:添加键值对

要添加键值对,需依次指定字典名和键,键放在方括号内,键与值的关联用等号表示

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}
print(houses_0)

houses_0['founder']='Godric Gryffindor'
houses_0['points']=490

print(houses_0)
----------
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red'}
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red', 'founder': 'Godric Gryffindor', 'points': 490}

▶ 注:Python3.7中,字典内键值对的排列顺序与添加顺序一致。对字典进行遍历是也是这个顺序。


3.4 改:修改字典中的值

要修改字典中的值,需依次指定字典名和键,键放在方括号内,用等号连接新值

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red',
		  'points':490}
print(houses_0)

houses_0['points']=440     ###
print(houses_0)
----------
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red', 'points': 490}
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red', 'points': 440}

扩展例子
当斯内普教授心情为很好、一般、很差时,格兰芬多分别会扣10分、30分、50分
定义一个字典,字典内包括斯内普教授心情的键值对,存储当前格兰芬多的分数,并更新此后格兰芬多的分数

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red',
		  'points':490,
		  '斯内普教授的心情':'一般'}
print(houses_0)

if houses_0['斯内普教授的心情']=='很好':
	depoints=10
elif houses_0['斯内普教授的心情']=='一般':
	depoints=30
else:
	depoints=50

houses_0['depoints']=depoints
houses_0['points']=houses_0['points']-depoints
print(houses_0)
----------
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red', 'points': 490, '斯内普教授的心情': '一般'}
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red', 'points': 460, '斯内普教授的心情': '一般', 'depoints': 30}

3.5 删:删除键值对

要删除键值对,需使用del语句指定字典名和键

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red',
		  'points':490,
		  '斯内普教授的心情':'一般'}
print(houses_0)

del houses_0['斯内普教授的心情']     ###
print(houses_0)
----------
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red', 'points': 490, '斯内普教授的心情': '一般'}
{'name': 'Gryffindor', 'representation': 'lion', 'color': 'red', 'points': 490}

▶ 注:删除为永久删除


3.6 遍历字典

(1)遍历所有键值对

方法items()
对字典使用方法items(),返回键值对列表

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

print(houses_0.items())     ###
----------
dict_items([('name', 'Gryffindor'), ('representation', 'lion'), ('color', 'red')])

for循环遍历字典

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

for i,j in houses_0.items():     ###
	print(f"\n键:{i}")
	print(f"值:{j}")
----------
键:name
值:Gryffindor

键:representation
值:lion

键:color
值:red
colors={'Gryffindor':'red',
		'Slytherin':'green',
		'Hufflepuff':'yellow',
		'Ravenclaw':'blue'}

for name,color in colors.items():     ###
	print(f"{name}'的代表色为{color}")
----------
Gryffindor'的代表色为red
Slytherin'的代表色为green
Hufflepuff'的代表色为yellow
Ravenclaw'的代表色为blue

for循环语句中:
先声明两个变量「i」和「j」,用于分别存储键和值
存储的键和值通过方法items()得到

我自己的理解是方法items()将字典分为了两个列表,列表1是关于键的列表,列表2是关于值的列表
声明的两个变量分别关联两个列表
于是原理就同列表遍历


(2)遍历所有键

方法keys()
对字典使用方法keys(),返回一个列表,其中包含字典的所有键

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

print(houses_0.keys())     ###
----------
dict_keys(['name', 'representation', 'color'])

for循环遍历键

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

for i in houses_0.keys():     ###
	print(i)
----------
name
representation
color

当遍历字典时,会默认遍历所有键

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

for i in houses_0:     ###
	print(f"对学院调查的项目为{i}")
----------
对学院调查的项目为name
对学院调查的项目为representation
对学院调查的项目为color

(3)遍历所有值

方法values()
对字典使用方法values(),返回一个列表,其中包含字典的所有值

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

print(houses_0.values())     ###
----------
dict_values(['Gryffindor', 'lion', 'red'])

for循环遍历值

houses_0={'name':'Gryffindor',
		  'representation':'lion',
		  'color':'red'}

for j in houses_0.values():     ###
	print(f"对学院调查的结果为{j}")
----------
对学院调查的结果为Gryffindor
对学院调查的结果为lion
对学院调查的结果为red

使用函数set()去掉字典的值中的重复值
对列表调用函数set(),可以去掉列表的重复值,返回列表中独一无二的元素

colors={'小A':'红色',
		'小B':'黑色',
		'小C':'红色',
		'小D':'蓝色',
		'小E':'红色'}
print(colors.values())
print(set(colors.values()))     ###
----------
dict_values(['红色', '黑色', '红色', '蓝色', '红色'])
{'蓝色', '红色', '黑色'}
colors={'小A':'红色',
		'小B':'黑色',
		'小C':'红色',
		'小D':'蓝色',
		'小E':'红色'}

for color in set(colors.values()):     ###
	print(f"{color}是他们喜欢的颜色之一")
----------
蓝色是他们喜欢的颜色之一
黑色是他们喜欢的颜色之一
红色是他们喜欢的颜色之一
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值