在 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 字典中的单个键添加多个值的常用方法。还有几种其他方法可以向键添加值,稍后可以详细探讨。希望本文对您来说是一次很好的学习体验!