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

merge dicts that have the same value for specific key

我需要合并键“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
    }
]

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

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

如果 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},
]