如何将指定结构的Python字典转换为目标格式的嵌套列表?
字典结构转嵌套列表实现
原代码错误点
- 重复使用同一个
node_dict对象:你在遍历y的循环外仅初始化了一次node_dict,所有插入nodes_list的都是该对象的引用,最终所有节点的值都会被最后一次赋值覆盖 - 遍历逻辑不符合数据结构:原字典每个value列表的元素是「节点ID+节点坐标」两两配对的结构,你每遍历一个元素就插入一次
nodes_list,会导致节点列表长度翻倍,且前半部分节点只有ID无坐标,后半部分节点ID错误
正确实现代码
mem_list = [] # 遍历原列表中的每个字典元素 for item in list_temp: # 遍历字典的每个键值对,键是外层ID,值是节点配对列表 for outer_id, node_pairs in item.items(): nodes_list = [] # 步长为2遍历节点配对列表,每次取一个ID和对应坐标 for i in range(0, len(node_pairs), 2): node_id = node_pairs[i] node_pos = node_pairs[i+1] nodes_list.append({ "Id": node_id, "Position": node_pos }) mem_list.append({ "Id": outer_id, "Nodes": nodes_list })
如果你的原数据是单个字典(没有嵌套在列表中),只需删除外层遍历list_temp的循环,直接遍历字典的键值对即可。
效果验证
输入原数据为:
list_temp = [{ 1: [1,{'X': -0.48595, 'Y': 0.0, 'Z': 0.56283}, 2,{'X': -0.48595, 'Y': 0.0, 'Z': -0.6}], 2: [2,{'X': -0.48595, 'Y': 0.0, 'Z': -0.6}, 4,{'X': 1.14756, 'Y': 0.0, 'Z': -0.6}], 3: [4,{'X': 1.14756, 'Y': 0.0, 'Z': -0.6}, 9,{'X': 1.14756, 'Y': 0.0, 'Z': 0.8}] }]
运行上述代码后得到的mem_list完全匹配你需要的目标结构。
内容的提问来源于stack exchange,提问作者D4w1d
相关产品推荐
相关产品推荐

