字典

引入

alien_0={'color':'green','point':5}
print(alien_0['color'])
print(alien_0['point'])

结果

green
5

介绍

字典是键值对的集合,与键相关连的值可以是数字,字符串,列表乃至字典,事实上可以把任何python对象作为值
在python中:字典用花括号来表示

字典的增删查改

查找键值对

格式:字典名[键]
如上面的print(alien_0['color'])

添加键值对

格式:字典名[需要添加的键]=需要添加的值

alien_0={'color':'green','point':5}
print(alien_0)

alien_0['x_position']=0
alien_0['y_position']=25
print(alien_0)

结果

{'color': 'green', 'point': 5}
{'color': 'green', 'point': 5, 'x_position': 0, 'y_position': 25}

*也可以新建一个空的字典,然后按照上述方法进行键值对的增加 *

修改字典中的值

和增加键值对的方式差不多,不过此时方括号内应为存在的键

alien_0={'color':'green','point':5}
print(alien_0)

alien_0['name']='wang'#本来不存在'name'这个键,那么就会添加
print(alien_0)

alien_0['name']='yellow'#已经存在'name'这个键,那么就会更改
print(alien_0)

结果

{'color': 'green', 'point': 5}
{'color': 'green', 'point': 5, 'name': 'wang'}
{'color': 'yellow', 'point': 5, 'name': 'wang'}

一个例子:根据外星人的移动速度来确定新的坐标

alien_0={'x_position':0,'y_position':25,'speed':'medium'}
print("Original x-positon:"+str(alien_0['x_position']))

if alien_0['speed']=='slow':
	x_increament=1
elif alien_0['speed']=='medium':
	x_increament=2
else:
	x_increament=3

alien_0['x_position']=alien_0['x_position']+x_increament
print("New x-position:"+str(alien_0['x_position']))

结果

Original x-positon:0
New x-position:2

通过修改字典中的speed,就可以根据speed来更改x_increment的值了

删除字典中的值

和删除列表元素一样,del也可以用来删除字典中的键值对,指定字典名和删除键即可

alien_0={'color':'green','points':5}
print(alien_0)

del alien_0['points']
print(alien_0)

结果

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

对于较长文本的存储和输出

favorite_language={
	'jen':'python',
	'wangyi':'java',
	'daming':'c++',
	'sam':'rust',
}

print("sam`s favorite_language is"+
	favorite_language['sam'].title()+
	".")

字典的遍历

python提供了遍历字典的所有键值对,所有键和所有值的方法

遍历字典中所有的键值对

favorite_language={
	'daming':'c++',
	'jen':'python',
	'sam':'rust',
	'wangyi':'java',
}

for name,language in favorite_language.items():
	print(name.title()+"`s favorite_language is"+
		language.title()+'.')

name和language是两个变量,后面字典的items()方法返回一个键值对列表
注意:有时遍历并不一定返回的顺序和存储的顺序相同,但是键值对肯定是一一对应的
结果

Daming`s favorite_language isC++.
Jen`s favorite_language isPython.
Sam`s favorite_language isRust.
Wangyi`s favorite_language isJava.

遍历字典中所有的键

favorite_language={
	'daming':'c++',
	'jen':'python',
	'sam':'rust',
	'wangyi':'java',
}

friends=['wangyi','sam']
for name in favorite_language.keys():#keys()可以省略,因为默认访问键
	print(name.title())

	if(name in friends):#如果字典中的名字在列表中的话打印额外信息
		print("hi")

实际上keys()不仅仅可以用来遍历,它实际上返回一个列表

favorite_language={
	'daming':'c++',
	'jen':'python',
	'sam':'rust',
	'wangyi':'java',
}

if 'sam' in favorite_language.keys():#判断是有'sam'这个键
	print("yes")

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

favorite_language={
	'daming':'c++',
	'jen':'python',
	'sam':'rust',
	'wangyi':'java',
}

for name in sorted(favorite_language.keys()):
	print(name)#先用keys()返回一个列表,然后排序输出

结果(按照字典序输出了)

daming
jen
sam
wangyi

遍历所有的值

与遍历所有的键的区别是,调用values()方法即可

解决元素重复问题

favorite_language={
	'daming':'c++',
	'jen':'python',
	'sam':'rust',
	'wangyi':'java',
	'yx':'java',
}

for language in set(favorite_language.values()):
	print(language)

使用set()可以剔除重复元素
结果(可以看到,并没有按照既定顺序输出)

python
rust
java
c++

嵌套

将字典存储在列表中

将字典存储在列表中或者将列表存放在字典中,这个称为嵌套
案例1

#创建一个用于存储外星人的列表
aliens=[]

#生成三十个外星人的字典,并添加到列表中
for i in range(0,30):
	new_alien={'speed':'slow','color':'green','points':5}
	aliens.append(new_alien)

#更改前三个外星人的信息
for alien in aliens[0:3]:
	if alien['color']=='green':
		alien['color']='yellow'
		alien['speed']='medium'
		alien['points']=10

#显示前五个外星人
for alien in aliens[:5]:
	print(alien)

print("......")

#显示这个列表的长度
print(str(len(aliens)))

结果

{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}

应用举例:在users这个列表中存放多个user字典来表示所有用户

将列表存放在字典中

#存储所点的披萨的信息
pizza={
	'crust':'thick',
	'toppings':['mushrooms','extra cheese'],
}

#描述所点的披萨的信息
print("you orderd a"+pizza['crust']+"-crust pizza"+
	"with the following toppings:")
for topping in pizza['toppings']:
	print("\t"+topping)

结果

you orderd athick-crust pizzawith the following toppings:
	mushrooms
	extra cheese

每当需要在字典中将一个键和多个值关联时,就可以在字典中嵌套一个列表

在字典中嵌套字典

users={
	'wangyi':{
	'first':'yi',
	'last':'wang',
	'location':'henan',
	},
	'yuxin':{
	'first':'yuxin',
	'last':'gan',
	'location':'guizhou',
	},

}


for user_name,user_info in users.items():
	print("username:"+user_name)#输出第一个键即“wangyi”
	full_name=user_info['last']+user_info['first']#把名字组合在一起
	location=user_info['location']

	print('\t'+"Full name:"+full_name.title())
	print("\tLocation:"+location.title())

结果

username:wangyi
	Full name:Wangyi
	Location:Henan
username:yuxin
	Full name:Ganyuxin
	Location:Guizhou

每个字典内部结构可以不同,但是会更复杂一些

posted @ 2023-08-01 09:49  NaCl。  阅读(20)  评论(2)    收藏  举报