Python 中将列表转换为嵌套字典
列表由元素的有序序列定义,而嵌套字典定义字典包含另一个字典。当我们想要在大型字典中存储大量数据时,需要嵌套字典。在 Python 中,我们有一些内置函数,如 reduce() 和 zip(),可以将列表转换为嵌套字典。例如,字典数据传达数据结构内容,更容易理解。
语法
以下语法在示例中使用:
reduce()
Python 中的这个内置函数遵循 functools 模块来对列表执行特定操作。
zip()
zip() 是 Python 中的一个内置函数,它接受任何类型的参数 - 列表、元组、字典、集合等。
使用 for 循环
该程序使用 for 循环迭代输入列表和集合,以将列表转换为嵌套字典。
示例
在下面的示例中,我们首先创建列表并将其存储在变量 my_list 中。根据问题陈述,现在我们将创建一个空字典并将其存储在变量 p_list 中,并且相同的变量再次存储在变量 emp_dict 中,表示嵌套结构。然后使用 for 循环迭代 my_list 中的每个项目。继续在变量 p_list[item] 中创建新字典,然后将此变量交换到名为 p_list 的变量,这将描绘 Python 中的嵌套字典。最后,我们借助名为 emp_dict 的变量打印结果。
my_list = ['a', 'b', 'c'] # Nesting structure emp_dict = p_list = {} for item in my_list: p_list[item] = {} p_list = p_list[item] print(emp_dict)
输出
{'a': {'b': {'c': {}}}}
使用 Functools 模块
需要在系统中安装以下命令:
pip install functools
该程序使用 functools 库,该库具有高级别的内置函数(如 reduce())来解决 Python 中将列表转换为嵌套字典的问题。
示例
在下面的示例中,首先导入名为 functools 的包,它将提供内置方法库()。然后创建列表并将其存储在变量 P 中。接下来,初始化变量 Q,该变量存储 reduce() 函数的值,该函数接受两个参数:
reduce(lambda x, y: {y:x}, Q[::-1]) for Q in P: reduce 函数从左到右迭代列表中的单个值。然后 lambda 函数采用两个参数 x 和 y,并返回一个字典,其中 y 为键,x 为值。'Q[::-1]) for Q in P' 描绘了嵌套字典结构,其中反转列表的每个结构元素都成为字典中的一个键。
最后,我们借助 Q 打印结果。
# The method name reduce() from functools module() from functools import reduce P = [['P', 'Q', 'R'], ['M', 'N', 'O']] Q = [reduce(lambda x, y: {y:x}, Q[::-1]) for Q in P] print(Q)
输出
[{'P': {'Q': 'R'}}, {'M': {'N': 'O'}}]
使用字典推导式
该程序使用 for 循环进行迭代,并且使用 zip 将创建 Python 中列表的字典转换。
示例
在下面的示例中,我们将首先在各自的变量中创建三个列表 - t1、t2 和 t3。然后借助键值对(即 a、b、c)创建字典的结构,这将表示使用 for 循环和内置方法 zip() 相对于变量 t1、t2 和 t3 的嵌套字典的形成。此过程称为字典推导式,并将其存储在变量 result 中。最后,我们借助变量 result 打印输出。
t1 = ['Letter', 'Word', 'Number'] t2 = ['A', 'Box', 'Integer'] t3 = [1, 3, 41905] # create the nested dictionary by using dictionary comprehension result = {a: {b: c} for (a, b, c) in zip(t1, t2, t3)} print("The nesting dictionary: ", result)
输出
The nesting dictionary: {'Letter': {'A': 1}, 'Word': {'Box': 3}, 'Number': {'Integer': 41905}}
使用递归
该程序使用任意深度来处理将列表转换为嵌套字典的问题。任意深度与字典推导式的行为类似。这里它将使用递归技术,称为函数自身调用函数。
示例
在下面的示例中,程序以递归 Python 开头,它接受两个参数 - lst(设置列表)和 d(将默认值设置为 0)。然后它将使用 if 语句检查整数 d 是否小于列表长度(即 len(lst)),如果发现小于,则返回空字典。接下来,该函数通过使用 字典推导式、if 语句和 for 循环返回嵌套字典的结果。然后创建列表并将其存储在变量 my_lst 中。现在调用名为 my_dict 的函数,该函数将变量 my_lst 作为参数传递并存储在变量 result 中。最后,借助变量 result 打印输出。
def my_dict(lst, d=0): # if-statement to check condition and return of nested dictionary if d > len(lst): return {} return {a[d]: my_dict([x for x in lst if x[d] == a[d]], d+1) for a in lst} my_lst = [['a', 'b', 'c'], ['d', 'e', 'f']] result = my_dict(my_lst) print("List to Nested Dictionary:\n", result)
输出
List to Nested Dictionary: {'a': {'b': {}}, 'd': {'e': {}}}
结论
我们探讨了四种不同的方法来解决基于将列表转换为 Python 中的嵌套字典的问题陈述。最后一个示例与所有其他示例略有不同,因为它使用任意深度方法显示列表和嵌套字典的输出,而前三个输出仅显示嵌套字典。列表和字典是 Python 中已知的 数据类型。