Python字典简洁
Python 中的变量可以存储各种数据类型。 之前,你已了解可以存储字符串和数字:
Python
python">name = 'Earth'
moons = 1
尽管此方法确实适用于少量数据,但处理相关数据时,可能会变得越来越复杂。 想象一下,你想存储有关地球卫星和木星卫星的信息。
python">earth_name = 'Earth'
earth_moons = 1jupiter_name = 'Jupiter'
jupiter_moons = 79
请注意,我们复制了具有不同前缀的变量。 这种重复会变得难以处理。 由于你会经常使用相关的数据集,例如不同城市不同月份的平均降雨量,因此将这些变量存储为单独的值并不是一个可行的选项。 可以改用 Python 字典。
Python 字典使你能够使用相关的数据集。 字典是键/值对的集合。 可以将其想象为容器内的一组变量,其中键是变量的名称,值是存储在其中的值。
创建字典
Python 使用大括号 ({ }) 和冒号 (:) 来表示字典。 可以创建一个空字典,之后再添加值,也可以在创建时进行填充。 每个键/值用冒号分隔,每个键的名称以字符串字面量形式包含在引号中。 由于键是字符串字面量,因此可以使用任何适当的名称来描述值。
让我们创建一个字典来存储地球的名称,以及地球具有的卫星数量:
python">planet = {'name': 'Earth','moons': 1
}
你有两个键,'name' 和 'moons'。 每个键的行为方式都与变量的行为方式非常相似:它们具有唯一的名称,并且存储一个值。 但是,它们包含在一个名为 planet 的更大变量中。
与常规变量一样,你需要确保使用正确的数据类型。 在前面示例中的 moons 的值 1 中,由于你想要使用整数,因此未在数字两边加上引号。 如果使用了 '1',Python 会将此变量视为字符串,这会影响执行计算的能力。
与常规变量不同,键名不需要遵循 Python 的标准命名规则。 可以使用键名来使代码更具描述性。
读取字典值
可以读取字典中的值。 字典对象具有 get 方法,可以使用该方法通过键访问值。 如果要打印 name,可以使用以下代码:
print(plant.get('name'))
Output
Earth
正如你所料,访问字典中的值是一项常见操作。 幸运的是,有一个快捷方式。 可以将键传递到方括号表示法 ([ ])。 此方法使用的代码比 get 少,并且大多数程序员都使用这种语法。 可以使用以下代码重写前面的示例:
python"># planet['name'] is identical to using planet.get('name')
print(planet['name'])
Output
Earth
尽管 get 和方括号 ([ ]) 在检索项时通常行为相同,但存在一个关键区别。 如果键不可用,get 将返回 None,[ ] 将引发 KeyError。
修改字典值
还可以使用 update 方法修改字典对象内的值。 此方法接受字典作为参数,并使用你提供的新值更新任何现有值。 如果要更改 planet 字典的 name,可以使用以下代码,例如:
python">planet.update({'name': 'Makemake'})# No output: name is now set to Makemake.
与使用方括号 ([ ]) 快捷方式读取值类似,你可以使用该相同的快捷方式来修改值。 语法的主要区别在于将使用 =(有时称为赋值运算符)来提供新值。 若要重写前面的示例以更改名称,可以使用以下代码:
python">planet['name'] = 'Makemake'# No output: name is now set to Makemake.
使用 update 的主要优势是能够在一次操作中修改多个值。 接下来的两个示例在逻辑上相同,但语法不同。 你可以随意使用你认为最合适的任何语法。 大多数开发人员选择使用方括号来更新单个值。
以下示例对 planet 变量进行相同的编辑,更新名称和卫星。 请注意,通过使用 update,你对函数进行了一次调用,而使用方括号涉及两次调用。
使用更新:
python">planet.update({'name': 'Jupiter','moons': 79
})
使用方括号:
python">planet['name'] = 'Jupiter'
planet['moons'] = 79
添加和删除键
初始化字典时,无需创建所有键。 事实上,无需创建任何键! 每当需要创建新键时,都可以像分配现有键一样分配它。
假设你要更新 planet 以包含以天为单位的轨道周期:
python">planet['orbital period'] = 4333# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# orbital period: 4333
# }
与 Python 中的其他所有内容一样,键名区分大小写。 因此,'name' 和 'Name' 在 Python 字典中被视为两个单独的键。
若要删除键,请使用 pop。 pop 返回值并从字典中删除键。 若要删除 orbital period,可以使用以下代码:
python">planet.pop('orbital period')# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# }
复杂数据类型
字典能够存储任何类型的值,包括其他字典。 这样,你可以根据需要对复杂数据进行建模。 想象一下,你需要存储 planet 的直径,该直径可以在其赤道或两极附近测量。 你可以在 planet 内创建另一个字典来存储此信息:
python"># Add address
planet['diameter (km)'] = {'polar': 133709,'equatorial': 142984
}# planet dictionary now contains: {
# name: 'Jupiter'
# moons: 79
# diameter (km): {
# polar: 133709
# equatorial: 142984
# }
# }
若要检索嵌套字典中的值,请将方括号链接在一起,或调用 get。
python">print(f'{planet["name"]} polar diameter: {planet["diameter (km)"]["polar"]}')
Jupiter polar diameter: 133709