一、何为字典?(类似于C语言中的结构体)
Python中的字典能够将相关信息关联起来,类似于C语言中的结构体,字典更能准确地为各种真实物体建模,能够高效的模拟现实中的情形。
比如,你可以创建一个表示人的字典,然后想在其中存储多少信息就存储多少信息:姓名、年龄、地址、职业以及要描述的任何方面。你还能够存储任意两种相关的信息,如一系列单词及其含义,一系列人名及其喜欢的数字,以及一系列山脉及其海拔等。
一个简单的字典:
alien_0 = {'color':'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])
结果:
二、使用字典
在Python中,字典是一系列键-值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。
在Python中,字典用在花括号{}中的一系列键-值对表示。
键-值对是两个相互关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键-值对之间用逗号分隔。在字典中,你想存储多少个键-值对都可以。
1、访问字典中的值
2、添加键-值对
字典是一种动态结构,可随时在其中添加键-值对。
要添加键-值对,可依次指定字典名、用方括号括起的键和相关联的值。
注意,键-值对的排列顺序与添加顺序不同。
Python不关心键-值对的添加顺序而只关心键和值之间的关联关系。
3、创建一个空字典
有时候,在空字典中添加键-值对是为了方便,而有时候必须这样做。
为此,可使用一对空的花括号定义一个字典,再分行添加各个键-值对。
使用字典来存储用户提供的数据或在编写能自动生成大量键-值对的代码时,都通常需要先定义一个空字典。
4、修改字典中的值
要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键想关联的新值。
5、删除键-值对
对于字典中不再需要的信息,可使用del语句将相应的键-值对彻底删除。使用del语句时,必须指定字典名和需要删除的键。
(注意:删除的键-值对永远消失了)
6、由类似对象组成的字典
前面的示例中,字典存储的是一个对象(游戏中的一个外星人)的多种信息,
但你也可以使用字典来存储众多对象的同一种信息。
favorite_language = {
'jen': 'python',
'sarah': 'C',
'edward': 'ruby',
'phil': 'python',
}
print("Sarah's favorite language is "+
favorite_language['sarah'].title()+
"."
)
结果:
在合适的地方拆分要打印的内容,并在第一行末尾加一个拼接运算符(+)。按回车键进入print语句的后续各行,并使用Tab键将他们对齐并缩进一级。
三、遍历字典
一个Python字典可能只包含几个键-值对,也可能包含数百万个键-值对。鉴于字典可能包含大量的数据,Python支持对字典遍历。字典可以用于各种形式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键-值对、键或值。
1、遍历所有的键-值对
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
for key,value in user_0.items():
print("\nKey: " + key)
print("Value " + value)
结果:
2、遍历字典中的所有键,keys()方法
不需要使用字典中的值时,方法keys()很有用。
favorite_language = {
'jen': 'python',
'sarah': 'C',
'edward': 'ruby',
'phil': 'python',
}
for name in favorite_language.keys():
print(name.title())
结果:
遍历字典时,会默认遍历所有的键。
但显式地使用方法keys()可以让代码更容易理解。
favorite_language = {
'jen': 'python',
'sarah': 'C',
'edward': 'ruby',
'phil': 'python',
}
for name in favorite_language:
print(name.title())
结果同上:
3、按顺序遍历字典中所有键 sorted()方法
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。
要以特定的顺序返回元素,一种办法是在循环中对返回的键进行排序。
为此,可用函数sorted()来获得按特定顺序排列的键列表的副本:
favorite_language = {
'jen': 'python',
'sarah': 'C',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_language.keys()):
print(name.title()+ ", thank you for taking the poll.")
结果:
4、遍历字典中的所有值 values()方法
如果你感兴趣的是字典包含的值,可使用方法values(),它返回一个值列表,而不包含任何键。
favorite_language = {
'jen': 'python',
'sarah': 'C',
'edward': 'ruby',
'phil': 'python',
}
print("The following language hava been mentioned:")
for language in favorite_language.values():
print(language.title())
结果:
以上做法提取字典中所有值,但没有考虑是否重复。
为剔除重复项,可以使用集合(set)。
集合类似于列表,但对每个元素都必须是独一无二的。
通过对包含重复元素的列表调用set(),可以让Python找出列表中独一无二的元素,并使用这些元素来创建集合。
favorite_language = {
'jen': 'python',
'sarah': 'C',
'edward': 'ruby',
'phil': 'python',
}
print("The following language hava been mentioned:")
for language in set(favorite_language.values()):
print(language.title())
结果:
四、嵌套
有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为“嵌套”。
我们可以在列表中嵌套字典,在字典中嵌套列表,甚至在字典中嵌套字典。
1、字典列表
字典相当于“个体”,字典列表相当于“集合”。
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)
结果:
2、在字典中存储列表
有时需要将列表存储在字典中,而不是将字典存储在列表中。
#存储披萨饼的信息
pizza = {
'crust': 'thick',
'toppings': ['mushroom','extra cheese'],
}
#概述所点的披萨
print("You ordered a "+pizza['crust'] + "-crust pizza "+
"with the following toppings:"
)
for topping in pizza['toppings']:
print("\t" + topping)
结果:
每当需要在字典中关联到多个值时,都可以在字典中嵌套一个列表。
favorite_language = {
'jen': ['python','ruby'],
'sarah': ['C'],
'edward': ['ruby','go'],
'phil': ['python','haskell'],
}
for name,languages in favorite_language.items():
print("\n" + name.title() + "'s favorite languages are:")
for language in languages:
print("\t" + language.title())
结果:
3、 在字典中存储字典
可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。
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())
结果: