Python 将列表转换为嵌套字典的代码

Python 将列表转换为嵌套字典的代码

列表由有序元素序列定义,而嵌套字典定义了一个包含另一个字典的字典。当我们想要在一个大字典中存储大量数据时,就需要使用嵌套字典。在Python中,我们有一些内置函数,如reduce()和zip(),可以将列表转换为嵌套字典。例如- 字典数据传达了数据的结构内容,更容易理解。

语法

以下是示例中使用的语法-

reduce()

这个Python中的内置函数遵循functools模块,在列表上执行特定操作。

zip()

zip()是Python中的内置函数,可以接受各种参数-列表、元组、字典、集合等等。

使用for循环

该程序使用for循环迭代输入列表和集合,将列表转换为嵌套字典。

示例

在下面的示例中,我们首先创建列表,并将其存储在变量my_list中。根据问题的描述,我们将创建一个空字典,并将其存储在变量p_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()函数。

  • 对于P中的每个Q,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 是否小于列表长度,如果是,则返回空字典。然后,该函数使用字典推导式、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中,列表和字典是已知的数据类型。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程