在 Python 中操作列表和字典
介绍
在深入讨论 Python 中的列表和字典之前,我们将先定义这两种数据结构。在此过程中,将它们分别视为日常待办事项列表和普通学校字典可能会有所帮助。
列表是可变的、有序的项目序列。因此,可以对列表进行索引、切片和更改。可以使用列表中每个元素的位置来访问它们。这同样适用于您的日程安排,您可以修改做事的顺序,甚至可以根据需要重新安排第二天的一些任务。
字典是一组可变的、无序的键值对,其中每个键必须是唯一的。要访问给定元素,我们必须使用其键来引用它,就像在学校字典中查找单词一样。
记住这些概念后,让我们回顾一下 Python 中列表和字典的一些可用属性和方法。虽然我们不打算全部介绍,但以下部分将让我们大致了解一下在本系列中使用这些数据结构可以完成哪些工作。
字典
在 Python 中,字典使用花括号书写。每个键值对(也称为元素)与下一个键值对之间用逗号分隔。为了说明这一点,我们来考虑以下字典:
player = { 'firstName': 'Jabari', 'lastName': 'Parker', 'jersey': '2', 'heightMeters': '2.03', 'nbaDebutYear': '2014' }
其中的键是firstName、lastName、jersey、heightMeters和nbaDebutYear。要访问与其中任何一个关联的值,我们将使用以下语法:
player['firstName']
player['lastName']
player['jersey']
player['heightMeters']
player['nbaDebutYear']
图 1 显示了上述语句的输出:
但是,如果我们尝试通过不存在的键访问元素,我们将遇到KeyError消息。为了解决这种情况,我们可以使用.get()方法。它将键作为第一个参数,并允许我们在不存在该键时指定后备值,如图 2 所示:
player['weightKilograms']
player.get('weightKilograms', '0.0')
当然,我们可以将该键及其对应的值作为新元素添加到字典中。为此,我们将使用.update()方法,如下所示:
player.update({'weightKilograms': '111.1'})
此外,可以使用赋值运算符来更新给定键的值:
player['jersey'] = '12'
让我们在图 3 中看看我们的字典现在是什么样子的:
print(player)
字典允许所有类型的数据类型作为值,正如我们将在本指南结尾处了解到的,包括列表和其他字典!
列表
在 Python 中,列表是用方括号书写的。虽然列表可以由不同的数据类型组成,但通常只包含同一类型的项目。换句话说,
myList = [1, 'hello', 2.35, True]
从语法上讲是有效的,但用处不大,你可以想象。另一方面,
prices = [1.35, 2.99, 10.5, 0.66]
更有意义。要访问任何列表元素,我们可以使用它的索引:
prices[0]
prices[1]
prices[2]
prices[3]
Python 列表是从零开始索引的。因此,第一个元素位于位置 0,第二个元素位于位置 1,第三个元素位于位置 2,依此类推。此外,最后一个元素位于位置 -1。
最常见的操作是使用.append()方法将新元素添加到列表末尾:
prices.append(3.49)
同样,也可以在给定位置插入一个项目(见图4):
prices.insert(2, 12.49)
另一个内置方法.sort()允许我们按数字、字母顺序或通过将自定义函数传递给key参数对列表中的项目进行排序,如图 5 所示。为了说明,让我们使用价格和一个名为产品的新列表:
prices.sort()
print(prices)
prices.sort(reverse=True)
print(prices)
products = ['Ball', 'Book', 'Chess set', 'Crayons', 'Doll', 'Play-Doh']
def product_len(product):
return len(product)
products.sort(key = product_len)
print(products)
products.sort(reverse = True, key = product_len)
print(products)
默认情况下,.sort()按升序排列。
列表也可以被切片,这意味着我们可以取部分(包括下限但不包括上限),如图 6 所示:
从第一个元素到给定位置:products[:3]
从给定位置直到最后一个元素:products[2:]
列表中两个给定位置之间:products[2:4]
综合起来
当我们使用 Python 列表来存储比整数、浮点数或字符串更复杂的数据结构时,可以更好地体现其真正的威力。字典列表就是一个很好的例子。
让我们创建更多包含其他篮球运动员信息的字典:
new_player1 = { 'firstName': 'LaMarcus', 'lastName': 'Aldridge', 'jersey': '12', 'heightMeters': '2.11', 'nbaDebutYear': '2006', 'weightKilograms': '117.9'}
new_player2 = { 'firstName': 'LeBron', 'lastName': 'James', 'jersey': '2', 'heightMeters': '2.03', 'nbaDebutYear': '2003', 'weightKilograms': '113.4' }
new_player3 = { 'firstName': 'Kawhi', 'lastName': 'Leonard', 'jersey': '2', 'heightMeters': '2.01', 'nbaDebutYear': '2011', 'weightKilograms': '104.3' }
现在我们可以将这些字典连同本指南第一个示例中使用的字典一起添加到名为 nba_players 的列表中(该列表最初是空的):
nba_players = []
nba_players.append(player)
nba_players.append(new_player1)
nba_players.append(new_player2)
nba_players.append(new_player3)
现在让我们检查一下nba_players:
print(nba_players)
整个列表可能不太容易阅读,因此我们之前描述的方法也适用于这种情况。以下是一些示例:
nba_players 中的球员人数:len(nba_players)
列表中的第一个球员:nba_players[0]
最后两个:nba_players[-2:]
由于列表中的每个元素都是一个字典,我们可以访问每个球员的 NBA 首秀年份并使用它来对列表进行排序(见图 7):
def get_nba_debut_year(player):
return int(player['nbaDebutYear'])
nba_players.sort(key = get_nba_debut_year)
print(nba_players)
概括
那么,在现实世界中,列表和字典都用在什么地方呢?具体来说,JSON(JavaScript 对象表示法)就是由字典列表构成的。JSON 是一种用于交换数据的流行文本格式,被用作各种环境中大多数 API(应用程序编程接口)的事实标准,可用于各种用途。开放的 NBA API就是这样一个例子,我们在本指南中引用了该 API 中的信息。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~