RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-566982

Darius's questions

Martin Hope
Darius
Asked: 2024-09-24 18:56:21 +0000 UTC

将字典列表转换为分层字典

  • 5

编写一个程序将数据转换为所需的形式。但如果嵌套增加,程序就需要补充一个关卡。递归本身就存在,但我不知道如何优化程序。

有一个字典列表(见下文)

data = [
        {"id": "000", "name": "name_1", "status": "pass", "parent_id": None},
        {"id": "000_0", "name": "name_2", "status": "pass", "parent_id": None},
        {"id": "111", "name": "child_1", "status": "pass", "parent_id": "000"},
        {"id": "111_1", "name": "child_1_1", "status": "pass", "parent_id": "111"},
        {"id": "111_2", "name": "child_1_2", "status": "pass", "parent_id": "111"}
    ]

由于需要转换为以下形式

[
    {
        'key': '0',
        'data': {
            'name': 'name_1',
            'id': '000',
            "status": "pass"
        },
        'children': [
            {
                "key": '0-0',
                "data": {
                    'name': 'child_1',
                    'id': '111',
                    "status": "pass"
                },
                'children': [
                        {
                            'key': '0-0-0',
                            'data': {
                                'name': 'child_1_1',
                                'id': '111_1',
                                "status": "pass"
                            },
                            'children': [ ]
                        },
                        {
                            'key': '0-0-1',
                            'data': {
                                'name': 'child_1_2',
                                'id': '111_2',
                                "status": "pass"
                            },
                            'children': [ ]
                        }
                    ]
                }
            ]
        },
    {
        'key': '1',
        'data': {
            'name': 'name_2',
            'id': '000_0',
            "status": "pass"
        },
        'children': [ ]
   }
]

我编写了以下代码进行转换。

def _tree(tests):
    arr_tree = []

    ind_key = 0
    for i in tests:
        if i[2] == None:
            ind_key += 1
            list_tree = {
                'key':  f"{ind_key}",
                'data': {
                    'id': i[0],
                    'name': i[1],
                    'parent_id': i[2]
                },
                "children": []
            }
            arr_tree.append(list_tree)

    ind_key2 = 0
    for  i in tests:
        for level_2 in arr_tree:
            if i[2] == level_2['data']['id']:
                ind_key2 += 1
                list_tree = {
                    'key':  f"{level_2['key']}-{ind_key2}",
                    'data': {
                        'id': i[0],
                        'name': i[1],
                        'parent_id': i[2]
                    },
                    "children": []
                }
                level_2["children"].append(list_tree)

    ind_key3 = 0
    for  i in tests:
        for level_2 in arr_tree:
            for level_3 in level_2["children"]:
                if i[2] == level_3['data']['id']:
                    ind_key3 += 1
                    list_tree = {
                        'key':  f"{level_3['key']}-{ind_key3}",
                        'data': {
                            'id': i[0],
                            'name': i[1],
                            'parent_id': i[2]
                        },
                        "children": []
                    }
                    level_3["children"].append(list_tree)

    return arr_tree
python
  • 1 个回答
  • 58 Views
Martin Hope
Darius
Asked: 2024-04-14 13:31:19 +0000 UTC

如何合并对象数组并按条件删除重复项

  • 6

有一个对象数组

status_data = [
    {
        "id": "id_1",
        "like": [
            {
                "status": "xx",
                "sum": 70
            }
        ],
    },
    {
        "id": "id_2",
        "like": [
            {
                "status": "xx",
                "sum": 8
            },
            {
                "status": "zz",
                "sum": 4
            }
        ]
    }
]

第二个对象数组

status_static = [
            {
                "status": "xx",
                "sum": 0
            },
            {
                "status": "zz",
                "sum": 0
            },
            {
                "status": "yy",
                "sum": 0
            }
]

所需结果

result = [
   {
        "id": "id_1",
        "like": [
            {
                "status": "xx",
                "sum": 70
            },
            {
                "status": "zz",
                "sum": 0
            },
            {
                "status": "yy",
                "sum": 0
            }
        ],
    },
    {
        "id": "id_2",
        "like": [
            {
                "status": "xx",
                "sum": 0
            },
            {
                "status": "yy",
                "sum": 8
            },
            {
                "status": "zz",
                "sum": 4
            }
        ]
    }
]

需要将对象添加到类似数组而不添加重复项(python)

将 status_static 添加到 status_data

for index, i in enumerate(status_data):  
  for m in status_static: 
    status_data[index]['like'].append(m)

我删除了重复项,但填充的项被覆盖(其中总和不等于 0)

for index, m in enumerate(status_data):  
   status_data[index]['like'] = list({v['status']: v for v in m['like']}.values())

结果不正确

result = [
   {
        "id": "id_1",
        "like": [
            {
                "status": "xx",
                "sum": 0
            },
            {
                "status": "zz",
                "sum": 0
            },
            {
                "status": "yy",
                "sum": 0
            }
        ],
    },
    {
        "id": "id_2",
        "like": [
            {
                "status": "xx",
                "sum": 0
            },
            {
                "status": "yy",
                "sum": 0
            },
            {
                "status": "zz",
                "sum": 0
            }
        ]
    }
]
python
  • 1 个回答
  • 58 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5