了解Python 3中的字典

介绍

字典是Python的内置 映射类型。 字典将 映射到 ,这些键值对提供了一种在Python中存储数据的有用方法。 通常用于保存相关的数据,例如ID或用户配置文件中包含的信息,字典使用大括号 { } 。 字典看起来像这样:
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
除了花括号外,字典中还有冒号(:)。 冒号左边的字是键。 可以由任何不可变的数据类型组成。上面字典中的键是:
  • 'username'
  • 'online'
  • 'followers'
上例中的每个键都是 字符串值。 冒号右边的词是价值观。 可以由任何数据类型组成。上面字典中的值是:
  • 'sammy-shark'
  • True
  • 987
这些值中的每一个都是字符串, 布尔值整数 。 让我们打印出字典 sammy
print(sammy)
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}
看看输出,您可能会注意到键值对的顺序已经移动。这是因为字典数据类型是 无序的 。 在这方面,字典不同于保持顺序并可以索引的 列表元组 。每当你打印出一个字典,顺序将是任意的,但键值对将保持不变,使我们能够根据它们的关系意义访问数据。

访问字典元素

因为字典数据结构是无序的,我们不能通过索引号来调用它的值,因为我们可以使用列表和元组。然而,我们可以通过引用相关的键来调用它的值。

使用键访问数据项

因为字典提供用于存储数据的键值对,所以它们可以是Python程序中的重要元素。 如果我们想要隔离Sammy的用户名,我们可以通过调用 sammy['username'] 。让我们打印出来:
print(sammy['username'])
Outputsammy-shark
字典的行为类似于数据库,因为它不是像调用列表那样调用整数来获取特定的索引值,而是为键分配一个值,并且可以调用该键以获取其相关值。 通过调用键 'username'我们得到该键的值,即 'sammy-shark' 。 可以使用相同的格式来类似地调用 sammy字典中的剩余值:
sammy['followers']
# Returns 987

sammy['online']
# Returns True
通过使用字典的键值对,我们可以引用键来检索值。

使用函数访问元素

除了使用键来访问值之外,我们还可以使用一些内置函数:
  • dict.keys()隔离键
  • dict.values()隔离值
  • dict.items()(key, value)元组对的列表格式返回项
要返回键,我们将使用 dict.keys()函数。 在我们的示例中,这将使用变量名称和 sammy.keys() 。 让我们把它传递给 print()函数,看看输出:
print(sammy.keys())
Outputdict_keys(['followers', 'username', 'online'])
我们收到的输出将键放在 dict_keys类的可迭代视图对象中。然后按列表格式打印键。 此函数可用于跨字典查询。例如,我们可以看看在两个字典数据结构之间共享的公共密钥:
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

for common_key in sammy.keys() & jesse.keys():
    print(sammy[common_key], jesse[common_key])
字典 sammy和字典 jesse都是用户简档字典。 他们的个人资料有不同的钥匙,但是,因为Sammy有一个社交个人资料与相关的追随者,而Jesse有一个游戏配置文件的关联点。他们有两个共同的键是 usernameonline状态,我们可以找到当我们运行这个小程序:
Outputsammy-shark JOctopus
True False
我们当然可以改进程序,使输出更加用户可读,但这说明 dict.keys()可以用来检查各种字典,看看他们共同的共同点或不。这对大型字典特别有用。 类似地,我们可以使用 dict.values()函数来查询 sammy字典中的值,它将被构造为 sammy.values() 。让我们打印出来:
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

print(sammy.values())
Outputdict_values([True, 'sammy-shark', 987])
方法 keys()values()分别使用 dict_keysdict_values的视图对象返回 sammy字典中存在的键和值的未排序列表。 如果我们对字典中的所有项感兴趣,我们可以使用 items()函数访问它们:
print(sammy.items())
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])
返回的格式是由 (key, value)元组与 dict_items视图对象组成的列表。 我们可以使用 for循环遍历返回的列表格式。例如,我们可以打印出给定字典的每个键和值,然后通过添加一个字符串使其更易于阅读:
for key, value in sammy.items():
    print(key, 'is the key for the value', value)
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark
上面的 for循环遍历 sammy字典内的项目,并逐行打印出键和值,以及信息使人们更容易理解。 我们可以使用内置函数从字典数据结构中访问项目,值和键。

修改字典

字典是一种可变的数据结构,因此您可以修改它们。在本节中,我们将介绍添加和删除字典元素。

添加和更改字典元素

不使用函数,可以使用以下语法将键值对添加到字典:
dict[key] = value
我们将通过向名为 usernames添加键值对来查看它是如何工作的:
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

usernames['Drew'] = 'squidly'

print(usernames)
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
我们现在看到字典已经更新为 'Drew': 'squidly'键值对。 因为字典是无序的,所以这个对可以出现在字典中的任何地方。 如果我们稍后在我们的程序文件中使用用户 usernames字典,它将包括附加的键值对。 此外,此语法可用于修改分配给键的值。在这种情况下,我们将引用现有键并向其传递不同的值。 让我们考虑一个字典,它是给定网络上的用户之一。我们会说,这个用户今天在关注者中有一个碰撞,所以我们需要更新传递给 'followers'键的整数值。 我们将使用 print()函数来检查字典是否被修改。
drew = {'username': 'squidly', 'online': True, 'followers': 305}

drew['followers'] = 342

print(drew)
Output{'username': 'squidly', 'followers': 342, 'online': True}
在输出中,我们看到跟随者的数量从整数值 305跳到 342 。 我们可以使用此方法将键值对添加到具有用户输入的字典。让我们编写一个快速程序, usernames.py在命令行运行,并允许用户的输入添加更多的名称和相关的用户名:
usernames.py
# Define original dictionary
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

# Set up while loop to iterate
while True:

    # Request user to enter a name
    print('Enter a name:')

    # Assign to name variable
    name = input()

    # Check whether name is in the dictionary and print feedback
    if name in usernames:
        print(usernames[name] + ' is the username of ' + name)

    # If the name is not in the dictionary...
    else:

        # Provide feedback        
        print('I don\'t have ' + name + '\'s username, what is it?')

        # Take in a new username for the associated name
        username = input()

        # Assign username value to name key
        usernames[name] = username

        # Print feedback that the data was updated
        print('Data updated.')
让我们在命令行上运行该程序:
python usernames.py
当我们运行程序时,我们将得到如下输出:
OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:
当我们完成测试程序时,我们可以按 CTRL + C退出程序。 您可以设置一个触发器来退出程序(如键入字母 q ),使用 条件语句来改进代码。 这说明如何以交互方式修改字典。有了这个特定的程序,只要你用 CTRL + C退出程序,你将失去所有的数据,除非你实现一种方式来 处理读取和写入文件 。 我们还可以使用 dict.update()函数添加和修改字典。 这与列表中可用的 append() 函数不同。 在下面的 jesse字典中,让我们添加关键字 'followers' ,并给它一个整数值与 jesse.update() 。 接下来,让我们 print()更新的字典。
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

jesse.update({'followers': 481})

print(jesse)
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}
从输出中,我们可以看到我们成功地将 'followers': 481键值对添加到字典 jesse 。 我们还可以使用 dict.update()方法通过替换特定键的给定值来修改现有的键值对。 让我们在 sammy字典中将Sammy的在线状态从 True更改为 False
sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

sammy.update({'online': False})

print(sammy)
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}
sammy.update({'online': False})引用现有键 'online' ,并将其布尔值从 True更改为 False 。 当我们调用 print()字典时,我们看到更新发生在输出中。 要将项目添加到字典或修改值,我们可以使用 dict[key] = value语法或函数 dict.update()

删除字典元素

正如您可以在字典数据类型中添加键值对和更改值,也可以删除字典中的项目。 要从字典中删除键值对,我们将使用以下语法:
del dict[key]
让我们来看一下代表其中一个用户的 jesse字典。 我们会说,Jesse不再使用在线平台玩游戏,所以我们将删除与 'points'键相关联的项目。然后,我们将打印字典,以确认该项目已删除:
jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

del jesse['points']

print(jesse)
Output{'online': False, 'username': 'JOctopus', 'followers': 481}
del jesse['points']jesse字典中删除键值对 'points': 723 。 如果我们想要清除所有值的字典,我们可以使用 dict.clear()函数。这将保留给定的字典,以防我们需要在程序中使用它,但它将不再包含任何项目。 让我们删除 jesse字典中的所有项:
jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

jesse.clear()

print(jesse)
Output{}
输出结果表明,我们现在有一个没有键值对的空字典。 如果我们不再需要一个特定的字典,我们可以使用 del完全摆脱它:
del jesse

print(jesse)
当我们在删除 jesse字典之后运行对 print()的调用时,我们会收到以下错误:
Output...
NameError: name 'jesse' is not defined
因为字典是可变数据类型,所以它们可以添加到,修改,并删除和清除项目。

结论

本教程通过Python中的字典数据结构。字典由键值对组成,提供了一种存储数据的方法,而不依赖于索引。这允许我们基于它们的含义和与其他数据类型的关系来检索值。 从这里,您可以在“ 了解数据类型 ”教程中了解有关其他数据类型的详细信息。 您可以看到在编程项目中使用的字典数据类型,例如使用Scrapy的 网络抓取
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏