阅读量

原创教程,严禁转载。引用本文,请署名 Python中文网, http://www.zglg.work


Day6:字典

字典是一种非常重要的数据容器,它使用“键(keys)”储存信息,与列表相比,字典效率更高。

为了跟上今天的内容,请打开Jupyter中的python_bootcamp文件夹,在该目录下创建一个名为"Week_06."文件。随后,在第一个单元格内用markdown写一个标题,标题名为”字典“。我们将在该单元格下展开后续工作。

什么是字典?

字典是一种存放无序数据的容器,以“键-值”对(key-value pairs)的形式存储数据。

“无序”的意思是它存储在内存中的方式。它不能通过索引访问,而是通过键访问。

因为列表中每个元素有一个特定的位置,所以列表是有序数据容器。Python中的字典更像是现实生活中的字典,“键”是字典中的单词,“值”是相对应的单词释义。

字典在处理大型数据、映射数据、CSV文件、APIs、发送或接收数据时非常有用。

创建一个字典

与其他变量一样,在创建字典时,等号左边为变量名字,等号右边即为是所要创建的字典。所有字典都是通过使用左、右大括号创建的,即{}

在大括号中间,输入键-值对即可。

注意,“键”只能用字符串或数字表示。

在键和值之间有一个冒号,冒号之后便是所对应的“值”。“值”可以是任何数据类型,可以是其他数据容器,甚至是另一个字典:

# 创建一个字典变量
empty = { }   # 空字典
person = { "name": "John Smith" } 
# 创建了一个名为person的字典,其中只有一个“键-值”对
customer = {
      "name": "Morty",
      "age": 26
}  # 这是一个具有两个“键-值”对的字典                    
print(customer)

在上一段代码中,我们可以看到声明了三个不同的字典,一个是空字典,一个有单个“键-值”对,另一个有多个键值对。

所有“键-值”对必须用冒号隔开。接下来我们学习如何访问字典内的数据。

访问字典

字典中的所有数据可通过“键-值”对中的键,访问与该“键”相对应的“值”。

在访问与“键”对应的“值”时,只需要先写出字典的名字,名字后面紧跟中括号,中括号内填入“键”即可。

# 通过“键”访问字典信息
person = { "name": 'John" }
print( person[ "name" ] )     

因为"name"键对应的值为“John”,故该代码结果为“John”。

使用get方法

另一种访问字典内信息的方式是使用get()方法。该方式与上一种方式的区别是get()不会抛出“键”错误(即当“键”不存在时,get()会返回"None")。

此外,还可以在get()中输入第二个参数,以便让程序返回更具体的数据类型。尝试下端代码:

# 使用get()访问字典
person = { "name": 'John" }
print( person.get("name") ) # 返回的结果同上一段代码
print( person.get("age", "Age is not available.") ) # get()是一种安全的访问字典的方法

运行上段代码,在第二个print()处,返回了"Age is not available."信息,这是因为不存在名为"age"的“键”。get()为我们提供了一种更为安全的访问字典数据的方法。

带有列表的字典

当你开始将数据容器作为“值”时,字典将变得极其强大。

# 将列表存储于字典中,并访问它
data = { "sports": [ "baseball", "football", "hockey", "soccer" ] }
print( data["sports"][0] )  # 首先输入“键”,其次输入索引

运行上段代码,看一下结果吧。为了访问列表,我们首先输入了列表所对应的“键”,之后我们便可以通过索引值访问字典内的数据。上段代码结果为"baseball"。

注意,在字典中储存列表时必须要有一个“键”与列表相对应。

# 在字典内存储列表的错误做法
sports = [ "baseball", "football", "hockey", "soccer" ]
sports_dict = dict( sports )# 因为没有“键”,将会导致错误

在将列表添加到字典时,因为没有与变量sports相对应的“键”,上段代码将会导致错误。如想将变量sports存入列表中,可对上述代码改写为:

>>> sports_dict = dict( { "sports" : sports } )

带有字典的列表

对于新手来说,在处理带有字典的列表或者是带有列表的字典时常常会有点儿不知所措。

在你懵逼之时,请牢记列表是通过索引访问,而字典是通过“键”访问。具体是先用索引还是先用“键”,取决于列表和字典的相互关系。

例如,当一个字典存储于列表内时,你需要先通过列表索引找到字典,然后再通过“键”访问字典内部数据。让我们来看个例子:

# 将字典存储于列表内,并访问该字典
data = [ "John", "Dennis", { "name": "Kirsten" } ]
print( data[2] )   # 字典的索引值为2
print( data[2]["name"] )   # 首先输入列表的索引值,之后再输入字典的“键”

请运行上段代码。首先,我们我们访问了列表内的索引值为2的元素,该元素是一个字典。之后我们访问了"name" “键”所对应的信息,即"Kirsten"。

注意: 在使用数字作为字典的“键”时,要一丝不苟。

字典内嵌套字典

由于字典在内存中的存储方式,它非常强大和高效。在实际应用中,我们常将一个字典作为另一个字典“键-值”对中的值,即“键-值”对中的值是一个字典。

# 将一个字典A存储于另一个字典B中,并访问A
data = {
      "team": "Boston Red Sox",
      "wins": { "2018": 108, "2017": 93 }
}
# 输出与键"wins"对应的值
print( data["wins"] ) 
# 先访问键"wins"的值,再访问下一个“键”
print( data["wins"]["2018"] ) 

运行上段代码,在第二个print()语句的结果为“108”。通过先访问与键"wins"对应的信息,再访问与键“2018”对应的信息,便得到了“108”这个数据。

今日练习

  1. 用户输入: 询问用户名字和年龄,根据回答创建一个包含这些“键-值”对的字典,并尝试输出字典信息。
  2. 访问配料表: 使用for循环,将pizza字典中“键”'ingredients'对应的所有配料信息
>>> pizza = {
>>>     'ingredients': ['cheese', 'sausage', 'peppers']
>>> }

今日小结

当数据以“键-值”对的形式储存时,数据容器将便于我们处理大量数据。请牢记通过“键”访问存储于字典中的数据。

上一篇:Day5创建你的第一个程序
下一篇:Day7还是字典