学习笔记5(第六章:字典)
1、在Python中,字典是一系列键-值对。每个键都与一个值相关联,可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。
2、字典用放在花括号{}中的一系列键-值对表示,键和值之间用冒号分隔,键-值对之间用逗号隔开。
3、键-值对的排列顺序与添加顺序不同。Python不关心键-值对的添加顺序,而只关心键和值之间的关联关系。(笔者没有试验成功,但是书上是这样写的)
创建一个空字典,添加元素:
alien_0 = {} alien_0['x_position'] = 0 alien_0['y_position'] = 25 alien_0['speed'] = 'medium' print(alien_0)
输出的字典键-值顺序依然和添加一样,可能书上所说的是个例。
{'x_position': 0, 'y_position': 25, 'speed': 'medium'}
4、字典可以存储一个对象的多种信息,也可以用来存储多个对象的同一种信息。
alien_0 = {'color':'green','points':5} print(alien_0['color']) green
对于较长的列表和字典,可以分行。
favorite_languages = { 'jier':'java', 'juzi':'python', 'tz':'csharp', } print("jier's favourite language is"+ favorite_languages['jier'].title()+ ".") jier's favourite language isJava.
5、用for循环来遍历字典。注意,遍历字典时,键-值对的返回顺序与存储顺序也不一定相同。
遍历字典favorite_language:
for name,language in favorite_languages.items(): print(name.title()+"'s favourite language is "+ language.title()+".")
输出结果:
Jier's favourite language is Java. Juzi's favourite language is Python. Tz's favourite language is Csharp.
6、遍历字典中的所有键。
for name in favorite_languages.keys(): print(name.title())
提取键,并存储到name变量中,再输出。遍历字典时,会默认遍历所有的键,因此,keys()方法可以省略,直接 for name in favourite_languages:,输出不变。添加了keys()可以让代码更加容易理解。
Jier
Juzi
Tz
可以使用keys()确定某个人是否在字典中。
if 'erin' not in favorite_languages.keys(): print("he isn't in ")
7、字典总是明确记录键和值之间的关联关系,但获取字典的元素时获取顺序是不可预测的。可以调用sorted()函数,让Python列出字典中的所有键,并在遍历前对这个列表进行排序。
for name in sorted(favorite_languages.keys()): print(name.title()+",thank you")
8、使用方法values(),返回一个值列表,而不包含任何键。这种做法提取字典中所有的值,但没有考虑是否有重复。为剔除重复项,可使用集合(set)。集合类似于列表,但每个元素都必须独一无二。
favorite_languages = { 'jier':'java', 'juzi':'python', 'tz':'csharp', 'xiao':'java' } for language in set(favorite_languages.values()): print(language.title())
输出结果:
Csharp
Java
Python
9、将一系列字典存储在列表中,或将列表存储在字典中,这称为嵌套。
在列表中嵌套字典,使用rang()自动生成30个外星人:
# 创建一个用于存储外星人的空列表 aliens = [] # 创建30个绿色的外星人 for alien_number in range(30): new_alien = {'color': 'green', 'point': 5, 'speed': 'slow'} aliens.append(new_alien) # 修改前三个外星人 for alien in aliens[0:3]: if alien['color'] == 'green': alien['color'] = 'yellow' alien['speed'] = 'medium' alien['point'] = 10 # 显示前五个外星人 for alien in aliens[:5]: print(alien) print("...") # 显示创建了多少个外星人 print("Total number of aliens:" + str(len(aliens)))
输出结果:
{'color': 'yellow', 'point': 10, 'speed': 'medium'} {'color': 'yellow', 'point': 10, 'speed': 'medium'} {'color': 'yellow', 'point': 10, 'speed': 'medium'} {'color': 'green', 'point': 5, 'speed': 'slow'} {'color': 'green', 'point': 5, 'speed': 'slow'} ... Total number of aliens:30
10、每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
favorite_languages = { 'jier': ['java', 'ruby'], 'juzi': ['python', 'c'], 'tz': ['csharp'], 'xiao': ['java', 'c'] } for name, languages in favorite_languages.items(): if len(languages) > 1: print("\n" + name.title() + "'s favourite language are:") else: print("\n" + name.title() + "'s favourite language is:") for language in languages: print("\t" + language.title())
输出结果:
Jier's favourite language are:
Java
Ruby
Juzi's favourite language are:
Python
C
Tz's favourite language is:
Csharp
Xiao's favourite language are:
Java
C
注意,与每个名字相关联的都是一个列表才可以用languages来依次存储字典中的每一个值。否则会得到的结果不是想要的。
11、在字典中存储字典。定义了一个users的字典,其中包含两个键:用户名‘aeinstein’和‘mcurie’。
users = { 'asinstein':{ '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())
输出结果:
Username:asinstein
Full name:Albert Einstein
Location:Princeton
Username:mcurie
Full name:Marie Curie
Location:Paris