在 Python 字典中,一个键可以保存多个值吗?


什么是 Python 字典?

字典是 Python 自身对数据结构的原生表示,可以认为类似于 C++ 中的 map。它是一个动态数据结构,动态存储键值对,并且是可变的。可以更好地将其理解为关联数组,其中每个元素都与其键值相关联。

一个键可以保存多个值吗?

虽然 Python 中的字典以键值对的形式存储值,但可以为字典中的同一个键存储多个值。这是通过将容器(如列表、集合和元组)设置为字典中每个键的值对象来实现的。在本文中,我们将主要关注

为每个键创建具有多个值的字典的步骤

  • 显式声明列表

  • 使用 extend() 函数添加值

  • 使用 append() 函数将子列表添加到列表

  • 使用 setdefault() 方法添加值

  • 使用 defaultdict() 添加元组

方法 1:显式声明列表

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

语法

dictionary_name = {'key': ['first_value'],
dictionary_name[‘key'] += ['value_added']

在这里,我们将值添加到最初映射为字典特定键的值的列表中(在第一个语句中初始化)。可以通过简单地使用赋值运算符来向列表中添加元素,类似于将字符串连接在一起,如第二个语句所示。

算法

步骤 1 - 创建字典并用单元素列表初始化键

步骤 2 - 将较新的元素添加到连接到要映射多个值的键的列表中

步骤 3 - 打印或对数据执行进一步必要的操作

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop['available'] += ['fish']
shop['available'] += ['another fish', 'and another fish']
print(f'shop list: \n{shop}') 

输出

shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list:
{'available': ['bread', 'fish', 'another fish', 'and another fish'], 'not available': ['eggs'], 'excess': ['milk']}

方法 2:使用 extend() 函数添加值

extend() 方法可以与赋值运算符完全相似地使用,以将值添加到特定键元素。我们不是使用“+=”与键一起使用,而是向键添加.extend()函数,该函数将值添加到映射到键的列表中。

语法

dictionary_name['key'].extend(['new_listvalue'])

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

算法

步骤 1 - 创建字典

步骤 2 - 用单值列表初始化键

步骤 3 - 扩展列表并将更多值添加到特定键元素

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop['available'].extend(['fish'])
shop['available'].extend(['another fish', 'and another fish'])
print(f'shop list: \n{shop}')

输出

shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list:
{'available': ['bread', 'fish', 'another fish', 'and another fish'], 'not available': ['eggs'], 'excess': ['milk']} 

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

与前面使用的赋值运算符或 extend() 方法不同,append() 方法的工作方式略有不同。此函数不是将值添加到字典中现有的映射列表中,而是在该映射列表中创建子列表并将值存储在其中。因此,它可以被认为是一种指数方法,其中列表的维度在每次插入操作后都会增加。此方法的可用性取决于我们的当前应用程序是否需要这种深度,因为它也存在缺点,即复杂性会迅速增加。

语法

dictionary_name['key'].append(['value1'])

语法类似于 extend() 方法,这就是为什么这两种方法乍一看工作方式非常相似的原因。append() 函数在所需的字典键上调用,并传递列表中的值。在这里,也只允许向 append() 函数传递单个参数,如果我们传递逗号分隔的子列表列表,它将显示 TypeError。

算法

步骤 1 - 创建字典

步骤 2 - 用单值列表初始化键

步骤 3 - 调用 append() 函数将包含值的子列表传递给特定键

步骤 4 - 为了访问各个子列表,我们使用主列表和相应子列表的索引

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop['available'].append(['fish'])
print(f'shop list: \n{shop}')
print(shop['available'][1][0])

输出

shop list: 
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list: 
{'available': ['bread', ['fish']], 'not available': ['eggs'], 'excess': ['milk']}
fish

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

在此方法中,我们使用setdefault()方法向键添加多个值。如果字典中已经存在特定键,则此函数会将传递给键的值添加进去。否则,将创建一个包含新值作为默认值的新键。然后我们可以使用 extend() 等方法向特定键的现有值添加新值。

语法

shop.setdefault('restocked', []).extend(['apples', 'oranges'])

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

算法

步骤 1 - 创建字典

步骤 2 - 用单值列表初始化键

步骤 3 - 调用 setdefault() 函数将新值传递给特定键,无论它是否已存在

步骤 4 - 使用 extend() 函数添加更多值

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop.setdefault('restocked', []).extend(['apples', 'oranges'])
print(f'shop list: \n{shop}') 

输出

shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk'], 'restocked': ['apples', 'oranges']} 

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

这是我们将要讨论的唯一一种使用元组而不是列表的方法。由于元组是不可变的,因此我们无法将值单独推入与键链接的元组中。在这里,defaultdict() 函数可以提供帮助,它是 dict 类的子类。我们使用元组分配键值对,如果键已经存在,则将值添加到现有列表中。

语法

shop_dict = defaultdict(list)

在这里,defaultdict() 函数将元组转换为键值对,并用它们初始化字典。然后使用上面使用的任何方法添加多个值。

算法

步骤 1 - 创建字典并导入 defaultdict() 类

步骤 2 - 使用 defaultdict() 函数用元组初始化键值对

步骤 3 - 使用 extend() 函数或上面描述的其他方法添加更多值

示例

from collections import defaultdict
shop=[("shop1","bread"),("shop2","milk"),("shop3","chips")]
shop_dict = defaultdict(list)
for key, value in shop:
   {shop_dict[key].append(value)} 
shop_dict['shop1'].extend(['coke','biscuits'])
print(f'shop list: \n'+str(dict(shop_dict))) 

输出

shop list: 
{'shop1': ['bread', 'coke', 'biscuits'], 'shop2': ['milk'], 'shop3': ['chips']} 

结论

因此,我们在本文中推断出,在 Python 字典中,单个键可以具有多个值。我们还介绍了向 Python 字典中的单个键添加多个值的常用方法。还有几种其他方法可以向键添加值,稍后可以详细探讨。希望本文对您来说是一次很好的学习体验!

更新于:2023年3月24日

44K+ 次浏览

开启您的职业生涯

完成课程获得认证

开始
广告