python中的字典

目录

一、使用字典

二、遍历字典

三、嵌套


一、使用字典

在python中,字典是一系列键值对。每个键都与一个值相关联,可用键来访问值。与键相关联的值可以是数、字符串、列表乃至字典,可将任何python对象用作字典中的值。

字典用花括号{ }来表示,其中包含一系列键值对。键和值之间用冒号:分割,键值对之间用逗号,分割。

alien_0={'color':'green'} #color为键,green为与之相关联的值

1.访问字典中的值

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

alien_0={'color':'green','points':'5'}
print(alien_0['color'])
new_points=alien_0['points']      #从字典中获取与键points相关联的值,并赋值给变量
print(f"You just earn {new_points} points.")
green
You just earn 5 points.

2.添加键值对

要添加键值对,依次指定字典名、键和值要指明在哪个列表中添加,添加什么键,值是多少 (键要用方括号[ ]括起来)  屏幕坐标系的原点为左上角

alien_0={'color':'green','points':'5'} 
print(alien_0)
alien_0['x_position']=0
alien_0['y_position']=25
print(alien_0)
{'color': 'green', 'points': '5'}
{'color': 'green', 'points': '5', 'x_position': 0, 'y_position': 25}

3.先创建一个空字典

先用花括号建一个空字典{ },再添加键值对。

alien_0 = {}             #先建空字典
alien_0['color']='green' #再向空字典中添加键值对
alien_0['points']='5'
print(alien_0)
{'color': 'green', 'points': '5'}

4.修改字典中的值

alien_0={'color':'green','points':5}
print(f"The alien color is {alien_0['color']}.")
alien_0['color']='yellow'      #修改键对应的值
print(f"The alien color now is {alien_0['color']}.")
The alien color is green.
The alien color now is yellow.

对一个能以不同速度的外星人进行位置跟踪

alien_0 = {'x_position':0,'y_position':25,'speed':'medium'} #字典中不会出现=,要用:链接键和值
print(f"Original position :{alien_0['x_position']}.")
if alien_0['speed'] == 'slow':  #在if语句中一般不用=,用==
	x_increment = 1
elif alien_0['speed'] == 'medium':
	x_increment = 2
else:
	x_increment = 3
alien_0['x_position'] = alien_0['x_position'] + x_increment #新位置=旧位置+移动距离
print(f"New position :{alien_0['x_position']}.")
Original position :0.
New position :2.

5.修改键值对 (del语句)

对于字典中不再需要的信息,可用del语句将相应的键值对删除,需指定字典名和要删除的键。删除的键值对会永远消失。

alien_0={'color':'green','points':5}
print(alien_0)
del alien_0['points']   #删除points键值对
print(alien_0)
{'color': 'green', 'points': 5}
{'color': 'green'}

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

使用多行来定义字典时,输入{ }后按下回车键,下一行会自动缩进四个空格,输入键值对,加上逗号,再按回车键,将自动缩进后续键值对。在最后一个键值对后加上逗号,可为在下一行添加键值对做准备。最后一个键值对的下一行添加右侧花括号},并缩进四个空格。

favorite_languages={
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
language = favorite_languages['sarah'].title()
print(f"Sarah's favorite language is {language}.")
Sarah's favorite language is C.

7.使用get()来访问值,避免不存在值而错误

如果字典中不存在要访问的值,会存在键值错误(KeyError)。就字典而言,可用方法get( )在指定的键不存在时,返回一个默认值,从而避免这样的错误。

alien_0={'color':'green','speed':'medium'}
print(alien_0['points'])
KeyError: 'points'

方法get( )的第一个参数用于指定键,必不可少;第二个参数为指定键不存在时要返回的值,是可选的。如果没有指定第二个参数,且指定的键不存在,python将返回值None。

alien_0 = {'color':'green','speed':'medium'}
point_value = alien_0.get('points','No point value assigned.')
print(point_value)
No point value assigned.

二、遍历字典

1.遍历所有的键值对(方法items)

for循环来遍历,声明两个变量来存储键和值,再用方法items( ),最后分别打印两个变量的值

遍历整个列表,将列表中的键赋给变量key,将列表中的值赋给变量value。

字典中for循环中两个变量是可直接用的,替代字典中的键和值。

user_0 = {
	'username':'efermi',
	'first':'enrico',
	'last':'fermi',
	}
for key,value in user_0.items():  #要声明两个变量,用于存储键值对中的键和值,变量名可随意
#for k,v in user_0.items():
	print(f"Key:{key}")
	print(f"Value:{value}")
Key:username
Value:efermi
Key:first
Value:enrico
Key:last
Value:fermi

循环中键都为人名,值都为语言。利用变量为name和language,而不用key和value,可以让人更容易明白循环的作用。

favorite_language={
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
for name,language in favorite_language.items():  
#python遍历字典中的每个键值对,将键赋给变量name,将值赋给变量language.
	print(f"{name.title()}'s favorite language is {language.title()}.")
Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Python.

2.遍历字典中的所有键(方法keys)

在不需要使用字典中的值时,方法keys( )返回键列表。使用方法keys( )可让代码更容易理解,但也可以忽略。

favorite_language = {
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
for name in favorite_language.keys():  #让python提取字典中所有的键,并依次赋给变量name
#for name in favorite_language:
	print(name.title())
Jen
Sarah
Edward
Phil

对部分键打印特殊消息:由字典中的键组成的列表赋值给变量,在后面循环中,可将变量名作为键来获得相应的值。 

favorite_language = {
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
friends = ['phil','sarah'] 
for name in favorite_language.keys():  #由字典中的键组成的列表赋给变量name
	print(f"Hi, {name.title()}")
	if name in friends:
#不需要对friends列表循环,只需要判断键(之前已经进行循环了)是否在列表中
		language = favorite_language[name].title() #将name的当前值做为键,获得对应的值
		print(f"\t{name.title()},I see you love {language}.")
Hi, Jen
Hi, Sarah
	Sarah,I see you love C.
Hi, Edward
Hi, Phil
	Phil,I see you love Python.

用方法keys( )确定某人是否接受了调查。方法keys( )并非只能用于遍历,实际上返回整个列表,包含字典中所有的键

favorite_language = {
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
if 'erin' not in favorite_language.keys():
	print("Erin,please take our poll!")
Erin,please take our poll!

 3.遍历字典中所有的值(方法values)

方法values( )返回一个值列表,不包含任何键。这种做法提取字典中所有的值,没有考虑是否重复。

favorite_language = {
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
print("The following languages have been mentioned:")
for language in favorite_language.values():
	print(language.title())
The following languages have been mentioned:
Python
C
Ruby
Python

4.按特定顺序遍历字典中所有的键(函数sorted)

一般情况下,遍历字典时将按照插入的顺序返回其中的元素。在有些情况下,需要按与此不同的顺序遍历字典。可在for循环中对返回的键进行排序,用函数sorted( )来获得按特定顺序排列的键列表的副本。

favorite_language = {
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
for name in sorted(favorite_language.keys()): #在for循环中对键进行了排序
	print(f"{name.title()},thank you for taking the poll.")
Edward,thank you for taking the poll.
Jen,thank you for taking the poll.
Phil,thank you for taking the poll.
Sarah,thank you for taking the poll.

5.删除字典中重复的值(函数set)

为剔除重复项,可使用函数set( ),让python找出列表中独一无二的元素。集合中的每一个元素都必须是独一无二的

favorite_language = {
	'jen':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}
print("The following languages have been mentioned:")
for language in set(favorite_language.values()):
	print(language.title())
The following languages have been mentioned:
Python
C
Ruby

注意:可以使用一对花括号来直接创建集合,并用逗号分割元素。集合和字典和容易混淆,当花括号内没有键值对时,定义的可能时集合。不同于列表和字典,集合不会以特定的顺序存储元素。

>>> languages={'python','c','python','ruby'}
>>> languages
{'python', 'ruby', 'c'}

三、嵌套

嵌套是指将一系列字典存储在列表中,或将列表做为值存在字典中。嵌套是一项强大的功能。

1.字典列表

alien_0只存储了一个外星人的各种信息,但无法存储第二个外星人的信息。为每个外星人创建字典,并将字典存储在列表中。

alien_0 = {'color':'green','points':5}
alien_1 = {'color':'yellow','points':10}
alien_2 = {'color':'red','points':15}
aliens = [alien_0,alien_1,alien_2]  #列表中无需加引号
for alien in aliens:    #上面3个字典的名字都为alien,只不过是循环
	print(alien)
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

更现实的是,外星人不止3个,且每个外星人都是使用代码自动生成,可以使用range( )函数。首先创建空列表,

aliens = []
for alien_number in range(30): #range返回一系列数,唯一用途是告诉python这个循环要执行多少次
	new_alien = {'color':'green','points':5,'speed':'slow'}  #创建可复制模板的字典
	aliens.append(new_alien)
for alien in aliens[:5]: #获取前5个外星人的切片
	print(alien)
print("...")
print(f"Total number of alien is :{len(aliens)}") #打印外星人的个数
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...
Total number of alien is :30

外星人变速且加快移动速度。如果外星人是绿色,就将其颜色改为yellow,速度改为medium,分数改为10.

aliens = []
for alien_number in range(30):
	new_alien = {'color':'green','points':5,'speed':'slow'}
	aliens.append(new_alien)
for alien in aliens[:3]:
	if alien['color'] == 'green':   #alien为列表,类似访问列表元素
		alien['color'] = 'yellow'
		alien['speed'] = 'medium'
		alien['points'] = 10        #三个等式赋值可以换位置,因为模板new_alien已经固定
for alien in aliens[:5]:
	print(alien)
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}

还可进一步拓展循环,将黄色外星人改为移动速度块且值为15分的红色外星人。

2.在字典中存储列表

在字典中添加列表,只需把键关联的值改为列表即可。通过键来获得列表。只有遍历才能打印列表或字典中的值,否则输出的是列表或字典。若字符串很长,可在合适位置分行,只需在首位加上引号,行首缩进。

pizza = {
	'crust':'thick',
	'toppings':['mushrooms','extra cheese']    #在字典中添加列表
	}
print(f"You ordered a {pizza['crust']}-crust pizza"  #通过键获得字典中的值
	"with the following toppings.")   #若字符串很长,可在合适位置分行,只需在首尾加上引号,行首要缩进
for topping in pizza['toppings']:     #遍历 通过字典的键获得值(列表) 赋值给变量
	print("\t" + topping)        #打印变量时若向空格,在前面添加"\t"+
You ordered a thick-crust pizzawith the following toppings.
	mushrooms
	extra cheese

在遍历该字典的for循环中,再使用一个for循环来遍历语言列表。

favorite_languages = {
	'jen':['python','ruby'],
	'sarah':['c'],
	'edward':['ruby','go'],
	'phil':['python','haskell'],
	}
for name,languages in favorite_languages.items(): 
	print(f"{name.title()}'s favorite languages are:")
	for language in languages:       #再次用for循环遍历上个for循环得到的languages列表
#for循环的位置很有讲究,若与上面那行互换,将每次都会打印上面那句话
		print(f"\t{language.title()}")
Jen's favorite languages are:
	Python
	Ruby
Sarah's favorite languages are:
	C
Edward's favorite languages are:
	Ruby
	Go
Phil's favorite languages are:
	Python
	Haskell

3.在字典中存储字典

每位用户都具有相同的结构,会使得嵌套得字典更容易。

users = {   #字典users包含两个键aeinstein和mcurie。与每个键相关联的都是一个字典
	'aeinstein':{    #注意为冒号
	'first':'albert',
	'last':'einstein',
	'location':'princeton',
	},               #注意有逗号
	'mcurie':{
	'first':'marie',
	'last':'curie',
	'location':'paris',
	},
}
for user_name,user_info in users.items(): 
#user_name指小字典的名;user_info指小字典的内容
	print(f"Username:{user_name}.")
	full_name = f"{user_info['first']} {user_info['last']}"
	location = user_info['location']
	print(f"\tFull name:{full_name.title()}")
	print(f"\tLocation:{location.title()}")
Username:aeinstein.
	Full name:Albert Einstein
	Location:Princeton
Username:mcurie.
	Full name:Marie Curie
	Location:Paris

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值