Python 从列表列表创建嵌套字典
我正在尝试将下面的列表列表转换为一个嵌套字典,其中包含Python 从列表列表创建嵌套字典,python,dictionary,Python,Dictionary,我正在尝试将下面的列表列表转换为一个嵌套字典,其中包含“epc_hlx”键值,作为一个字典列表,因为它可以包含多个字典元素,如下所示: "epc_hlx":[ { "measure":{ } }, { "measure":{ }
“epc_hlx”
键值,作为一个字典列表
,因为它可以包含多个字典元素,如下所示:
"epc_hlx":[
{
"measure":{
}
},
{
"measure":{
}
}
]
列表:
lst =[['header', 'aircraft'],
['header', 'engine_1'],
['header', 'engine_2'],
['header', 'engine_1', 'epc_hlx'],
['header', 'engine_1', 'epc_hlx', 'measure'],
['header', 'engine_2', 'epc_hlx'],
['header', 'engine_2', 'epc_hlx', 'measure']]
{'header': {'aircraft': {'None': {'None': {}}},
'engine_1': {'None': {'None': {}},
'epc_hlx': {'None': {}, 'measure': {}, 'ts': {}}},
'engine_2': {'None': {'None': {}},
'epc_hlx': {'None': {}, 'measure': {}, 'ts': {}}}}}
以下是预期输出:
{
"header":{
"aircraft":{
},
"engine1":{
"epc_hlx":[
{
"measure":{
}
}
]
},
"engine2":{
"epc_hlx":[
{
"measure":{
}
}
]
}
}
}
我试过一些方法,但没有一种方法能达到我想要的效果。所以我被困在这个问题上了。提前感谢您的帮助我不知道这是否完全符合您的要求。但它会给你一个想法。您可以优化解决方案
li = [['header', 'aircraft'],
['header', 'engine_1'],
['header', 'engine_2'],
['header', 'engine_1', 'epc_hlx'],
['header', 'engine_1', 'epc_hlx', 'measure'],
['header', 'engine_1', 'epc_hlx', 'ts'],
['header', 'engine_2', 'epc_hlx'],
['header', 'engine_2', 'epc_hlx', 'measure'],
['header', 'engine_2', 'epc_hlx', 'ts']]
借用
输出:
lst =[['header', 'aircraft'],
['header', 'engine_1'],
['header', 'engine_2'],
['header', 'engine_1', 'epc_hlx'],
['header', 'engine_1', 'epc_hlx', 'measure'],
['header', 'engine_2', 'epc_hlx'],
['header', 'engine_2', 'epc_hlx', 'measure']]
{'header': {'aircraft': {'None': {'None': {}}},
'engine_1': {'None': {'None': {}},
'epc_hlx': {'None': {}, 'measure': {}, 'ts': {}}},
'engine_2': {'None': {'None': {}},
'epc_hlx': {'None': {}, 'measure': {}, 'ts': {}}}}}
d:
lst =[['header', 'aircraft'],
['header', 'engine_1'],
['header', 'engine_2'],
['header', 'engine_1', 'epc_hlx'],
['header', 'engine_1', 'epc_hlx', 'measure'],
['header', 'engine_2', 'epc_hlx'],
['header', 'engine_2', 'epc_hlx', 'measure']]
{'header': {'aircraft': {'None': {'None': {}}},
'engine_1': {'None': {'None': {}},
'epc_hlx': {'None': {}, 'measure': {}, 'ts': {}}},
'engine_2': {'None': {'None': {}},
'epc_hlx': {'None': {}, 'measure': {}, 'ts': {}}}}}
使用正则表达式清理
'None':{}
:
reg = re.compile("'None': {}")
s = str(d)
while (len(re.findall("'None': {}", s))):
s = re.sub("'None': {}", '', s)
s = re.sub("{,", '{', s)
多亏Pygirl发布了之前的答案,我终于找到了解决方案
li = [['header', 'aircraft'],
['header', 'engine_1'],
['header', 'engine_2'],
['header', 'engine_1', 'epc_hlx'],
['header', 'engine_1', 'epc_hlx', 'measure'],
['header', 'engine_1', 'epc_hlx', 'ts'],
['header', 'engine_2', 'epc_hlx'],
['header', 'engine_2', 'epc_hlx', 'measure'],
['header', 'engine_2', 'epc_hlx', 'ts']]
首先要做的是将我的输入列表修改为:
allblocs=[['header', 'aircraft'],
['header', 'engine_1', 'epc_hlx', 'measure'],
['header', 'engine_2', 'epc_hlx', 'measure']]
然后我重新使用并添加了epc_hlx
键的逻辑,该键为我提供了以下代码:
dict_header={}
for blocs in allblocs :
current_lvl=dict_header
for bloc in blocs :
if bloc not in current_lvl:
if(bloc == "epc_hlx"):
current_lvl[bloc]=[]
current_lvl=current_lvl[bloc]
elif(bloc == "measure"):
dict_tmp={}
dict_tmp[bloc]={}
current_lvl.append(dict_tmp)
else:
current_lvl[bloc]={}
current_lvl=current_lvl[bloc]
else:
current_lvl=current_lvl[bloc]
为什么epc_hlx映射到一个列表?因为我将有几个{“measure”:{},“ts”:{}哦,我明白了。我看不出你的问题中提到过这一点,是吗?为什么
epc_hlx
将列表作为值,所有其他的都有dict?有什么具体的原因吗?是的,因为epc_hlx
将包含如下8条命令:{“measure”:{},“ts”:{}
非常感谢,我会这样搜索,如果成功,我会接受你的答案:)你只需要添加epc_hlx的逻辑:[{…}]
。是的,我肯定我认为这是一条路,我要去吃午饭,然后我会试试!我没有结束这个问题。我不能删除评论。但是我撤销了你违背我建议的尝试。评论会被当选的主持人删除(我不是这样的)如果有几个用户认为他们很粗鲁。得到答案,即使是技术上正确的答案对你有帮助,也不能证明问题是好的,许多用户都渴望在遵守规则方面赢得声誉。至少有5个人不同意你的意见,认为你知道如何问一个好问题。如果其中三个人有一定的特权您的问题在得到改进之前将被关闭。描述尝试的内容将是一个很好的编辑,更详细地说明失败的原因。但是,请避免外部链接。用户喜欢直接在帖子中提供信息。