多个列表的嵌套字典

2024-05-19 20:12:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将两个嵌套字典的值分配给对方。例如,如果我们假设父代和子代,然后孙辈将如何分配给相应的子代。(父项是键,值是子项,然后子项是键,值是孙项)

我尝试从sqlite数据库导入大型数据集,然后根据所需的父子关系,将它们相应地分组到字典中。这是为了创建嵌套字典的字典来填充qmenu,其中输入必须保持字典格式。我不熟悉如何通过映射或递归来提高效率。你知道吗

我当前的代码按我所希望的方式工作,但是有什么方法可以使它更高效或更递归?你知道吗

# DATA
A = ['item0','item1']
B = [['item00','item01','item02'],['item11','item12']]
C = [['item000'],['item010','item011'],['item020'],['item110','item111'],['item120']]


# FLATTEN B
B_ls = []
for i in range(len(C)):
    B_ls = [item for sublist in B for item in sublist]

# INITAIATE DICTIONARIES
master = {}
parent = {}
child = {}

# INITIATE CELL CONTENT COUNTER
skipper = 0

# CREATE NESTED DICITIONARIES
for j in range(len(A)):
    child = {}
    for i in range(len(B)):
        tempD1 = {B_ls[i+skipper]:C[i+skipper]}
        child.update(tempD1)
    parent = {A[j]:child}
    master.update(parent)
    skipper += len(B[j])

# CHECK RESULTS
print(master)

Tags: inmasterchildforlen字典rangeitem
1条回答
网友
1楼 · 发布于 2024-05-19 20:12:40

下面是一种使用嵌套字典理解的方法-

这个想法是通过外循环中的zippingA来构建父子结构,因为在B中父keys和子列表或子列表一样多。你知道吗

现在,这些child中的每一个都应该包含value包含在C中的子列表,因此我们可以创建一个^{}并在每次我们想在内部字典中设置一个新的孙子时检索它的next项:

A = ['item0','item1']
B = [['item00','item01','item02'],['item11','item12']]
C = iter([['item000'],['item010','item011'],['item020'],['item110','item111'],['item120']])

d = {p:{gs:next(C) for gs in s} for p,s in zip(A,B)}

{'item0': {'item00': ['item000'],
           'item01': ['item010', 'item011'],
           'item02': ['item020']},
 'item1': {'item11': ['item110', 'item111'], 
           'item12': ['item120']}}

相关问题 更多 >