从列表列表创建嵌套字典

问题描述

我想根据列表创建嵌套的字典。以下是列表

  ls3 = [['YOU','HE','EST8'],['YOU','OLM6'],'SLO','WLR8'],['ARE','KLP','EST6'],'POL','WLR4'],['DOING','TIS','OIL8'],['GREAT','EOL6'],['WORK','KOE','RIW8'],'PNG4'],'ROE','ERC8'],'WQD6'],['KEEP','PAR','KOM8'],'RTW6'],'PIL','XCE4'],'ACE8'],['ROCKING','OUL','AZS6'],'RVX8']]

下面是我的代码,到目前为止,我已经能够创建它:

di = {}
di2 = {}
for i,j,k in ls3:
   di.setdefault(i,[]).extend([j,k])
for i,j in di.items(): 
   di2.update({i:{j[0]:j[1:]}})

我的输出

{'YOU': {'HE': ['EST8','OLM6','WLR8']},'ARE': {'KLP': ['EST6','WLR4']},'DOING': {'TIS': ['OIL8']},'GREAT': {'POL': ['EOL6']},'WORK': {'KOE': ['RIW8','PNG4','ERC8','WQD6']},'KEEP': {'PAR': ['KOM8','RTW6','XCE4','ACE8']},'ROCKING': {'OUL': ['AZS6','RVX8']}}

预期输出

{{'YOU':{'HE':{'EST':8,'OLM':6},'SLO':{'WLR':8}}},{'ARE':{'KLP':{'EST':6},'POL':{'WLR':4}}},and so on}

解决方法

double setdefault用于2个嵌套字典。

最后一部分是分割数字。如果超过一个数字,则应使用正则表达式。

di = {}
for i,j,k in ls3:
   di.setdefault(i,{}).setdefault(j,{})[k[:-1]] = int(k[-1])