【Python9】字典与集合

1.字典

1.1.认识字典

  • 字典在python中,是可以让数据更加清晰的数据容器,用“{}”表示,里面的元素以键值对的方式存储,例如:
#创建一个外星人游戏,这些外星人的颜色和点数各不相同
#这是一个简单的字典,存储了有关特定外星人的信息
alien_0={'color':'green','points':5}
print(alien_0)
#使用两条print语句来访问并打印这些信息
print(alien_0['color'])
print(alien_0['points'])


>>>{'color': 'green', 'points': 5}
green
5

在字典中,字典的键有两个要求:

  • ①字典的键必须是不可变数据类型
  • 不可变数据类型包括:数字、字符串、元组、布尔值。
  • 可变数据类型:字典,列表

例如以下方式,都可以创建字典:

dict1={1:'小明'}
dict2={'name':'小明'}
dict3={(1,2):'小明'}
dict4={False:'小明'}
print(dict1,dict2,dict3,dict4)

>>>{1: '小明'} {'name': '小明'} {(1, 2): '小明'} {False: '小明'}
  • ②字典的键不允许重复
  • 如果字典里面的键重复了,后面键的值会覆盖前面键的值:
dict1 = {'name':'小蓝','name':'小绿'}
print(dict1)

>>>{'name': '小绿'}

字典里面的值可以是任意数据类型,可以是数字、字符串、元组、布尔值,也可以是列表,甚至字典。

dict1 = {'age':1}  #数字
dict2 = {'name':'小明'} #字符串
dict3 = {'data':(1,2)}  #元组
dict4 = {'result':False} #布尔值
dict5 = {'name':['小明','小红']} #列表
dict6 = {'小明':{'age':21,'sex':'男'}} #字典
print(dict1)
print(dict2)
print(dict3)
print(dict4)
print(dict5)
print(dict6)

>>>{'age': 1}
{'name': '小明'}
{'data': (1, 2)}
{'result': False}
{'name': ['小明', '小红']}
{'小明': {'age': 21, 'sex': '男'}}

1.2.访问字典中的值

要获取与键相关的值,可依次指定字典名和放在方括号里的键:

dict1 = {'color':'green','piece':56,'size':'superbig'}
print(dict1['color'])   #这将返回dict1中与键'color'相关联的值
print(dict1['piece'])   #这将返回dict1中与键'piece'相关联的值
print(dict1['size'])   #这将返回dict1中与键'size'相关联的值

>>>green
56
superbig

1.3.字典的增删改查

字典是一种可变的数据容器,所以具有增删改查的功能。

  • 字典中元素是无顺序排列的
  • 只能通过key来获取value

1.3.1.增加

字典是一种动态结构,在字典中,通过使用"[key]"的形式,并且给它赋值。如果这个key当前不包含在字典中,那么就会把这个key以及value同时加入到字典中。

alien_0={'color':'green','points':5}
print(alien_0)
#现在给外星人添加坐标
alien_0['x_position']=0
alien_0['y_position']=5
print(alien_0)

>>>{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 5}
{'color': 'green', 'points': 5, 'y_position': 5, 'x_position': 0}
#Python不关心键值对的添加顺序,只关心键和值的关联关系。

先创建一个空字典,有时候我们为了方便,会先创建一个空字典,然后往里面添加元素:

alien_0={}
print(alien_0)
#现在给外星人添加坐标
alien_0['y_position']=5
alien_0['x_position']=0

print(alien_0)

>>>{}
{'y_position': 5, 'x_position': 0}

1.3.2.删除

a.在字典中,我们可以使用pop()从字典中移除某个元素

alien_0={}
print(alien_0)
#现在给外星人添加坐标
alien_0['y_position']=5
alien_0['x_position']=0
print(alien_0.pop('y_position'))
print(alien_0)

>>>{}
5
{'x_position': 0}

b.也可以使用del删除字典里面的元素:

alien_0={}
print(alien_0)
#现在给外星人添加坐标
alien_0['y_position']=5
alien_0['x_position']=0
del alien_0['x_position']
print(alien_0)

>>>{}
{'y_position': 5}

c.也可以使用clear清除字典里面所有的元素:

alien_0={}
print(alien_0)
#现在给外星人添加坐标
alien_0['y_position']=5
alien_0['x_position']=0
print(alien_0)
alien_0.clear() #删除全部元素
print(alien_0)

>>>{}
{'y_position': 5, 'x_position': 0}
{}

1.3.3.修改

在字典中,通过对字典中的键重新赋值,可以修改元素

扫描二维码关注公众号,回复: 10670671 查看本文章
alien_0={'y_position': 5, 'x_position': 0}
print(alien_0)
alien_0['y_position']=35 #修改y_position的值
print(alien_0)

>>>{'y_position': 5, 'x_position': 0}
{'y_position': 35, 'x_position': 0}

1.3.4.查找

a.在字典中,可以通过[key]的方式查询字典中的元素:

alien_0={'x_position': 5, 'y_position': 0}
result=alien_0['x_position']
print(result)

>>>5

b.使用get方法也能查找

alien_0={'x_position': 5, 'y_position': 0}
print(alien_0.get('x_position')) #使用get方法
print(alien_0['x_position']) #直接获取
#那么这两种方法的区别在哪儿
#当查找的键值不存在时 
print(alien_0.get('color')) #返回值是None
print(alien_0['color'])   #会报错

>>>5
5
None
KeyError: 'color'

1.4.由类似对象组成的字典

在前面的示例中,字典存储的都是一个对象的多种信息,但我们可以用字典来存储众多对象的同一种信息。

例如,你要调查很多人,询问他们最喜欢的编程语言:

这是示例还演示了如何将较长的print语句分成多行,以及字典分行定义,看起来格式更好

favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
print(favorite_language)
#获取sarah最喜欢的语言
print('sarah最喜欢的语言是:'+
	favorite_language.get('sarah').lower())

>>>{'jen': 'C', 'sarah': 'Python', 'edward': 'Ruby', 'phil': 'Python'}
sarah最喜欢的语言是:python

1.5.遍历字典

1.5.1.遍历所有的键-值对

字典本身提供了一个items()帮助我们遍历字典中的键值对:

items()返回一个键值对列表,接着使用for循环依次将每个键值对存储到指定的两个变量中:

(无序的字典,遍历返回顺序和存储顺序可能是不一样的)

user_0={
	'username':'username',
	'age':25,
	'sex':'男'
}
print(user_0.items())
print(user_0.keys())
print(user_0.values())
#使用for循环遍历所有键值对
for key,value in user_0.items():
	print(key,value)

>>>dict_items([('username', 'username'), ('age', 25), ('sex', '男')])
dict_keys(['username', 'age', 'sex'])
dict_values(['username', 25, '男'])
username username
age 25
sex 男
favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
#使用for循环遍历所有键值对
#打印出每个人喜欢的语言
for key,value in favorite_language.items():
	print(key.title()+'最喜欢的语言是:'+value)

>>>Jen最喜欢的语言是:C
Sarah最喜欢的语言是:Python
Edward最喜欢的语言是:Ruby
Phil最喜欢的语言是:Python

1.5.2.遍历字典中的所有键

字典本身提供了一个keys()帮助我们遍历字典中的键:

favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
#使用for循环遍历所有键值对
#打印出每个人喜欢的语言
for key in favorite_language.keys():
	print('被调查者的名字是'+key.title())

>>>被调查者的名字是Jen
被调查者的名字是Sarah
被调查者的名字是Edward
被调查者的名字是Phil

遍历字典时,会默认遍历所有的键,因此将上述代码中 for key in favorite_language.keys() 改成 for name in favorite_language,输出将不变,但使用keys()方法更容易理解一些,你可以选择这样做,也可以选择不这样做。

favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
#使用for循环遍历所有键值对
#打印出每个人喜欢的语言
for key in favorite_language:
	print('被调查者的名字是'+key.title())

>>>被调查者的名字是Jen
被调查者的名字是Sarah
被调查者的名字是Edward
被调查者的名字是Phil
favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
friends=['jen','sarah']
#使用for循环遍历所有键值对
#打印出每个人喜欢的语言
for key in favorite_language.keys():
	print(key.title())
	#在这种循环方式里,可以使用当前键来访问与之相关联的值
	if key in friends:
		print(key+'是我的朋友')

>>>Jen
jen是我的朋友
Sarah
sarah是我的朋友
Edward
Phil

你还可以使用keys()确认某人是否接受了调查

favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
if 'erin' not in favorite_language.keys():
	print('erin没有接受调查')
else:
	print('erin接受了调查')

>>>erin没有接受调查

所以,方法keys()并非只能用于遍历,实际上,它返回一个列表,其中包含字典的所有键

1.5.3.按顺序遍历字典中所有的键

字典总是明确的记录键与值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的,我们可以使用sortde()来获得特定顺序排列的键。

favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
for key in sorted(favorite_language.keys()):
	print(key)

>>>edward
jen
phil
sarah

1.5.4.遍历字典中所有的值

字典本身提供了一个values()帮助我们遍历字典中的值:(它返回一个值列表,而不包含任何键)

favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
#获取所有最喜欢的语言
for value in sorted(favorite_language.values()):
	print(value)

>>>C
Python
Python
Ruby

这种方法提取字典中所有的值,而没有考虑是否重复,涉及的值很少时,这也许不是问题,但是如果被调查者很多,最终的列表可能包含大量的重复项,为剔除重复项,可使用集合set(),集合类似于列表,但每个元素必须是独一无二的:

favorite_language={
	'jen':'C',
	'sarah':'Python',
	'edward':'Ruby',
	'phil':'Python'
}
#调用set()
#可以让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合
for value in sorted(set(favorite_language.values())):
	print(value)

>>>C
Python
Ruby

1.6.字典的嵌套使用

1.6.1.列表中存储字典

将字典放入列表中:

alien_0={'color':'green','points':5}
alien_1={'color':'yellow','points':10}
alien_2={'color':'red','points':15}
#我们将三个字典都放到一个名为alien的列表中
aliens=[alien_0,alien_1,alien_2]
for alien in aliens:
	print(alien)

>>>{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

我们使用range()代码自动生成30个外星人

#创建一个空列表用于存储外星人
aliens=[]
#创建30个绿色外星人
for i in range(30):
	aliensi={'color':'green','points':5,'speed':'slow'}
	aliens.append(aliensi)
#显示前五个外星人
for alien in aliens[0:5]:
	print(alien)
print('...')
#显示创建了多少个外星人
print(len(aliens))

>>>{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...
30

我们可以发现,当我们使用列表存储字典时,可以进行统计,每个外星人都时独立的,让我们可以独立的修改每个外星人,而且很方便的创建了30个字典。

经常需要在列表中包含大量的字典,例如你可能需要为网站的每个用户创建一个字典,并将这些字典储存在一个名为users的列表中。

user_1={
	'name':'小明',
	'age':18,
	'sex':'男'
}
user_2={
	'name':'小红',
	'age':16,
	'sex':'女'
}
users=[user_1,user_2]
#打印用户数量
print(len(users))
#打印每个用户的详细信息
for user in users:
	print(user['name'])
	for key,value in user.items():
		if key != 'name':
			print(key,value)

>>>2
小明
age 18
sex 男
小红
age 16
sex 女

1.6.2.字典中存储列表

发布了57 篇原创文章 · 获赞 19 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/IGGIRing/article/details/105436504