本人是个新手,写下博客用于自我复习、自我总结。
如有错误之处,请各位大佬指出。
参考教材: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循环更容易。