代码之家  ›  专栏  ›  技术社区  ›  Davi A. Sampaio

合并对特定键具有相同值的dict

  •  1
  • Davi A. Sampaio  · 技术社区  · 2 年前

    我需要组合对键“tag”具有相同值的字典。

    就像这样:

    [
        [
            {
                "tag": "#2C00L02RU",
                "stamina": 233
            },
            {
                "tag": "#8YG8RJV90",
                "stamina": 20
            },
            {
                "tag": "#LQV2JCPR",
                "stamina": 154
            },
            {
                "tag": "#9JQLPGLJJ",
                "stamina": 134
            }
        ],
        [
            {
                "tag": "#2C00L02RU",
                "health": 200
            },
            {
                "tag": "#8YG8RJV90",
                "health": 40
            },
            {
                "tag": "#LQV2JCPR",
                "health": 100
            },
            {
                "tag": "#9JQLPGLJJ",
                "health": 240
            }
        ],
        [
            {
                "tag": "#LQV2JCPR",
                "fame": 1
            },
            {
                "tag": "#8YG8RJV90",
                "fame": 2
            },
            {
                "tag": "#9JQLPGLJJ",
                "fame": 3
            },
            {
                "tag": "#2C00L02RU",
                "fame": 4
            }
        ],
        [
            {
                "tag": "#LQV2JCPR",
                "moves": 6
            },
            {
                "tag": "#8YG8RJV90",
                "moves": 0
            },
            {
                "tag": "#9JQLPGLJJ",
                "moves": 8
            },
            {
                "tag": "#2C00L02RU",
                "moves": 4
            }
        ]
    ]
    

    为此:

    [
        {
            "tag": "#2C00L02RU",
            "stamina": 233,
            "health": 200,
            "fame": 4,
            "moves": 4
        },
        {
            "tag": "#8YG8RJV90",
            "stamina": 20,
            "health": 40,
            "fame": 2,
            "moves": 2
        },
        {
            "tag": "#LQV2JCPR",
            "stamina": 154,
            "health": 100,
            "fame": 1,
            "moves": 6
        },
        {
            "tag": "#9JQLPGLJJ",
            "stamina": 134,
            "health": 240,
            "fame": 3,
            "moves": 8
        }
    ]
    

    我已经尝试过无数次循环,但都失败了。 我不会在这里展示我的任何尝试,因为它们甚至没有接近预期的结果。

    如果你需要任何其他信息,请告诉我。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Andrej Kesely    2 年前

    如果 lst 根据您的问题列表,您可以:

    out = {}
    for l in lst:
        for d in l:
            out.setdefault(d["tag"], {}).update(d)
    
    print(list(out.values()))
    

    印刷品:

    [
        {"tag": "#2C00L02RU", "stamina": 233, "health": 200, "fame": 4, "moves": 4},
        {"tag": "#8YG8RJV90", "stamina": 20, "health": 40, "fame": 2, "moves": 0},
        {"tag": "#LQV2JCPR", "stamina": 154, "health": 100, "fame": 1, "moves": 6},
        {"tag": "#9JQLPGLJJ", "stamina": 134, "health": 240, "fame": 3, "moves": 8},
    ]