在Python字典中,一个键是否可以持有多个值

在Python字典中,一个键是否可以持有多个值

Python中的字典是什么

字典是Python中自带的数据结构,类似于C++中的映射。它是一种动态数据结构,可以动态存储键值对,并且是可变的。可以将其理解为关联数组,其中每个元素都与其键关联。

一个键是否可以持有多个值

尽管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()函数将要添加到与键配对的列表中的值添加进去。

步骤

第一步 − 创建一个字典

第二步 − 用单值列表初始化键

第三步 − 调用setdefault()函数以传递新值给特定的键,无论它是否已经存在

第四步 − 使用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字典中,一个键可以有多个值。我们也学习了向一个键添加多个值的常见方法。还有其他几种方法可以向一个键添加值,可以在以后详细探讨。希望通过阅读本文能够获得很好的学习经验!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程