Python 字典能否让一个键拥有多个值?

2025年1月5日 | 阅读 7 分钟

引言

在本教程中,我们学习了一个键能否在 Python 字典中拥有多个值。字典是 Python 数据结构的表示,可以看作类似于 C++ 中的映射。它是一种动态数据结构,可以动态地存储键值对,并且它是可变的。它可以更好地被理解为关联数组,其中每个元素都与其主值相关联。虽然 Python 中的字典将值存储为键值对,但可以存储与同一个键对应的多个值。这是通过将列表、集合和元组等容器设置为字典每个键的属性来实现的。在本教程中,我们将重点介绍创建具有单个键的多个值的字典的步骤。步骤如下:

  1. 显式声明一个列表
  2. 使用 extend() 函数添加值
  3. 使用 append() 函数将子列表添加到列表
  4. 使用 setdefault() 方法添加值
  5. 使用 defaultdict() 方法添加元组

现在我们将学习创建单个键的多个值的字典的这些步骤。

步骤 1:显式声明一个列表

我们可以显式声明一个包含多个元素的列表,并将它们分配给一个键。详细过程包括将键初始化为一个包含单个值的列表,然后使用赋值运算符更新该列表。

语法

显式声明一个包含多个元素的列表的语法如下:

在这里,我们将值添加到列表中,该列表最初被定义为字典值(从第一个表达式开始)。如第二个语句所示,您可以使用赋值运算符向列表中添加内容,类似于字符串连接。

算法

显式声明一个包含多个元素的列表的算法如下:

  1. 首先,我们需要创建一个字典,并将所有键初始化为单个值的列表。
  2. 然后,将一个新元素添加到映射到多个值的键所关联的列表中。
  3. 最后,打印数据上的任何其他必要操作。

程序代码

这里我们提供了一个 Python 代码,用于显式声明一个包含多个元素的列表。代码如下:

输出

现在,我们运行上面的代码并找到多个元素的列表。结果如下:

The name list is: 
{'passed': ['Riya'], 'not passed': ['Priya'], 'excess': ['Hiya']}
The name list is: 
{'passed': ['Riya', 'Neha', 'another Neha', 'and another Neha'], 'not passed': ['Priya'], 'excess': ['Hiya']}

步骤 2:使用 extend() 函数添加值

extend() 方法的使用方式与运算符类似,用于将值添加到键元素。不是使用 '+=' 运算符,而是将 .extend() 函数放在键上方,该函数将一个新值添加到该键的列表中。

语法

使用 extend() 函数添加值的语法如下:

在这里,我们可以看到 extend() 方法在字典的键值上被调用。extend() 函数只接受一个参数,所以一次只能向列表中添加一个值。如果我们添加一个单独的值列表,解释器将返回 TypeError。

算法

使用 extend() 函数添加值的算法如下:

  1. 首先,我们需要创建一个字典。
  2. 然后,我们需要将所有键初始化为单个值的列表。
  3. 最后,扩展列表并向主元素添加更多值。

程序代码

这里我们提供了一个 Python 代码,用于使用 extend() 函数添加值。代码如下:

输出

现在,我们运行上面的代码并找到多个元素的列表。结果如下:

The name list is: 
{'passed': ['Riya'], 'not passed': ['Priya'], 'excess': ['Hiya']}
The name list is: 
{'passed': ['Riya', 'Neha', 'another Neha', 'and another Neha'], 'not passed': ['Priya'], 'excess': ['Hiya']}

步骤 3:使用 append() 函数将子列表添加到列表

与之前使用的赋值运算符或 extend() 方法不同,append() 方法的行为略有不同;该函数不是将值添加到字典中的现有列表中,而是创建子列表并在其中存储值。因此,它可以被认为是一个表达式,列表的大小在每次插入后都会增加。此方法的有效性取决于我们应用程序的深度需求,因为它也有快速增加复杂性的缺点。

语法

使用 append() 函数将子列表添加到列表的语法如下:

语法与 extend() 方法类似,因此两者在首次工作时都很好。在所需的字典键上调用 append(),并将列表的值作为参数传递。这里也只能将一个参数传递给 append() 函数。如果我们传递一个单独的子列表,它将引发 TypeError。

算法

使用 append() 函数将子列表添加到列表的算法如下:

  1. 首先,我们需要创建一个字典。
  2. 然后,我们需要将所有键初始化为单个值的列表。
  3. 之后,调用 append() 函数将子列表的值传递给键。
  4. 最后,要访问每个列表,我们使用主列表的索引和相应的子列表。

程序代码

这里我们提供了一个 Python 代码,用于使用 append() 函数将子列表添加到列表。代码如下:

输出

现在,我们运行上面的代码并找到多个元素的列表。结果如下:

The name list is: 
{'passed': ['Riya'], 'not passed': ['Priya'], 'excess': ['Hiya']}
The name list is: 
{'passed': ['Riya', ['Neha']], 'not passed': ['Priya'], 'excess': ['Hiya']}
Neha

步骤 4:使用 setdefault() 方法添加值

在这里,我们使用 setdefault() 方法向键添加更多值。如果唯一键已存在于字典中,此函数将把传递给该键的值添加进去。否则,将默认创建一个具有新值的新键。我们可以使用 extend() 等方法向特定键的现有值添加一个新值。

语法

使用 setdefault() 方法添加值的语法如下:

在上面的语法中,我们将两个参数传递给 setdefault() 函数,因为我们不知道指定的键是否已存在于字典中。如果我们确定键存在于字典中,则可以忽略第二个参数(空列表)。然后,我们使用 extend() 函数将值添加到与键配对的列表中。

算法

使用 setdefault() 方法添加值的算法如下:

  1. 首先,我们需要创建一个字典。
  2. 然后,我们需要将所有键初始化为单个值的列表。
  3. 之后,调用 setdefault() 函数,它将一个新的值传递给指定的键,即使该键已存在。
  4. 最后,使用 extend() 函数添加值。

程序代码

这里我们提供了一个 Python 代码,用于使用 setdefault() 方法添加值。代码如下:

输出

现在,我们运行上面的代码并找到多个元素的列表。结果如下:

The name list is: 
{'passed': ['Riya'], 'not passed': ['Priya'], 'excess': ['Hiya']}
The name list is: 
{'passed': ['Riya'], 'not passed': ['Priya'], 'excess': ['Hiya'], 'restocked': ['Neha', 'Nisha']}

步骤 5:使用 defaultdict() 方法添加元组

这是我们将要讨论的唯一方法,它作用于元组而不是列表。由于元组是不可变的,我们无法将单个值传递给与键关联的元组。这里是 defaultdict() 函数,它是 dict 类的子类。我们使用元组来分配键值对,如果键已存在,我们将值添加到现有列表中。

语法

使用 defaultdict() 方法添加元组的语法如下:

算法

使用 defaultdict() 方法添加元组的算法如下:

  1. 首先,我们需要创建一个字典并导入 defaultdict() 类。
  2. 然后,我们需要使用 defaultdict() 函数将键值对初始化为元组。
  3. 最后,使用 extend() 函数,或者我们可以使用任何其他方法来添加更多值。

程序代码

这里我们提供了一个 Python 代码,用于使用 defaultdict() 方法添加元组。代码如下:

输出

现在,我们运行上面的代码并找到多个元素的列表。结果如下:

The name list is: 
{'Name1': ['Riya', 'Neha', 'Nisha'], 'Name2': ['Priya'], 'Name3': ['Hiya']}

结论

在本教程中,我们学习了 Python 字典是否允许一个键拥有多个值。因此,我们得出结论,Python 字典中的一个键可以拥有多个值。我们还研究了向 Python 字典中的单个键添加多个值的不同方法。还有许多方法可以向键添加值,以后可以进行详细研究。在这里,我们学习了每种方法的语法、算法和程序代码。