Python基础(四) 字典


本人是个新手,写下博客用于自我复习、自我总结。
如有错误之处,请各位大佬指出。
参考教材:Python编程从入门到实践


简单字典例子:

alien_0 = {'color':'green' , 'points':'5'}
print(alien_0['color'])
print(alien_0['points'])
new_points = alien_0['points']
print("You just earned "+str(new_points)+" points!")

在Python中,字典是一系列键-值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。

事实上,可以将任何对象用作字典中的值。

字典是用花括号{}括起的;列表是用方括号[]括起的;元组是用括号()括起的。

键和值之间用冒号分隔,而键-值对之间用逗号分隔。在字典中,你想存储多少个键-值对都可以。

字典是一种动态结构,可随时在其中添加键值对。如:

alien_0['x_position']=0
alien_0['y_position']=25

注意:键值对的排列顺序与添加顺序不同。字典中并不关心键值对的添加顺序,而只关心键和值之间的关联关系。

当然有时候,需要建立一个空字典,并在之后向其中添加键值对。

修改字典中的数值,如:

alien_0['color']='yellow'

删除键值对,如:

del alien_0['color']  #如果删除了就直接消失

数据过多的字典

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

定义好字典后,在最后一个键值对的下一行添加一个右花括号,并缩进四个字符。
建议在最后一个键值对的后面加一个逗号,这样可以为以后添加键值对最好准备。

1.遍历字典:

favorite_languages = {
	'jen':'Python',
	'sarah':'C',
	'edward':'ruby',
	'phil':'Java',
	}	
for key,value in favorite_languages.items():
	print("\nKey: "+key.title())
	print("Value: "+value.title())

当然其中的key和value可以是任何变量名,这里只是让其有意义。

如:

for name,language in favorite_languages.items():
	print(name.title()+"'s favorite languages is "+language.title())

注意:即便遍历字典时,键值对的返回顺序也与存储顺序不同。这就是因为Python并不关注这个存储顺序,只关注键值之间的关联关系。

只遍历键

for name in favorite_languages.keys():
	print(name.title())

例:

favorite_languages = {
	'jen':'Python',
	'sarah':'C',
	'edward':'ruby',
	'phil':'Java',
	}	
for name,language in favorite_languages.items():
	print(name.title()+"'s favorite languages is "+language.title())
	
for name in favorite_languages.keys():
	print(name.title())
	
friends=['phil','erin','sarah']
for people in friends:
	for name in favorite_languages.keys():
		if people == name:
			print("Hi "+name.title()+", thanks to take our poll!")
			judge=1
	if judge != 1:
		print("Hi "+people.title()+", please take our poll!")
	judge=0

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

如:

for name in sorted(favorite_languages.keys()):
	print(name.title()+", thanks for taking the poll!")

遍历字典中的所有值

如:

for language in favorite_languages.values():
	print(language.title())

这种做法提取字典中所有的值,而没有考虑是否重复。设计的值很少时,也许没什么问题。

但如果数据很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合set。

集合类似于列表,但每个元素都必须是独一无二的。这样就可以创建一个新的,独一无二的集合。

如下:

languages=[]
for language in set(favorite_languages.values()):
	languages.append(language)
print(languages)

2.嵌套

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。

字典列表

例:

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:
	print(alien)

例:

#创建一个用于存储外星人的空列表
aliens=[]
#创建30个绿色的外星人
for alien_number in range(30):
	new_alien={'color':'green','points':5,'speed':'slow'}
	aliens.append(new_alien)
#更改前3个外星人
for alien in aliens[0:3]:
	if alien['color']=='green':
		alien['color']='yellow'
		alien['speed']='medium'
		alien['points']=10
	elif alien['color']=='yellow':
		alien['color']='red'
		alien['speed']='fast'
		alien['points']=15
#显示前五个外星人
for alien in aliens[0:5]:
	print(alien)
print("···")
#显示创建了多少个外星人
print("Total number of aliens: "+str(len(aliens)))

在字典中存储列表

例:

#存储比萨的信息
pizza={
	'crust':'thick',
	'toppings':['mushrooms','extra cheese'],
	}
#概述比萨信息
print("You ordered a "+pizza['crust']+"-crust pizza "+
	"with the following toppings:")
for topping in pizza['toppings']:
	print("\t"+topping)
例:	
favorite_languages={
	'jen':['python','ruby'],
	'sarah':['c'],
	'edward':['ruby','go'],
	'phil':['python','haskell'],
	}
for name,languages in favorite_languages.items():
	print("\n"+name.title()+"'s favorite languages are:")
	for language in languages:
		print("\t"+language.title())

字典中存储字典

例:

users={
	'aeinstein':{
		'first':'albert',
		'last':'einstein',
		'location':'princeton',
		},
	'mcurie':{
		'first':'marie',
		'last':'curie',
		'location':'paris',
		},
	}
for username,user_info in users.items():
	print("\nUsername: "+username)
	full_name=user_info['first']+" "+user_info['last']
	location=user_info['location']
	print("\tFull name: "+full_name.title())
	print("\tLocation: "+location.title())

可想而知,如果字典中的字典的结构不相同的话,用for循环内部会相当复杂。

这里结构相同,使得for循环更容易。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只爭朝夕不負韶華

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值