将字典列表中的重复值与某个键组合

combine duplicates values in list of dictionaries with a certain key

我有一大堆项目,我需要找到一种方法来重新组合那些具有重复值的项目。我需要在一系列列表中找到具有相同 titleyear 值的字典,并为 episodeCast 创建一个新列表,其中只保留一个字典.如果没有匹配的 i return 也有列表的字典。

所以所有具有相同名称、年份值的字典都应该有一个字典,并将它们的不同值放在列表 cast-list episode-list 中,并 保持没有重复的字典。

我尝试了很多东西,我使用了两个嵌套的for循环,Filter...,但是我做不到!

如果有人能帮上忙,我真的很感激。

[
               {
                    "class": "TV Shows With Five or More Seasons",
                    "location":"usa",
                    "series": [
                        {
                            "title": "Mad Men",
                            "year": "2015",
                            "episode":10,
                            "Cast" :"Elisabeth Moss",   
                        },
                        {
                            "title": "Mad Men",
                            "year": "2015",
                            "episode":14,
                            "Cast" :"January Jones",         
                        },
                        {
                            "title": "Mad Men vostfr",
                            "year": "2017",
                            "episode":20,
                            "Cast" :"Jon Hamm",
                             "Type" :"Drama"                 
                        }
                    ],
                    "producer": "Matthew Weine",
                }
            ]

我想这样分组输出:

[
    {
        "class": "TV Shows With Five or More Seasons",
        "location":"usa",
        "series": [
            {
                "title": "Mad Men",
                "year": "2015",
                "episode-list":[10,14],
                "Cast-list" :["Elisabeth Moss","January Jones"],
            },
            {
                "title": "Mad Men vostfr",
                "year": "2017",
                "episode-list":[20],
                "Cast-list" :["Jon Hamm"],
                "Type" :"Drama"           
            }
        ],
        "producer": "Matthew Weine",
    }
]

注意:我必须保留仅存在于 dict 中的 Type

尝试:

lst = [
    {
        "class": "TV Shows With Five or More Seasons",
        "location": "usa",
        "series": [
            {
                "title": "Mad Men",
                "year": "2015",
                "episode": 10,
                "Cast": "Elisabeth Moss",
            },
            {
                "title": "Mad Men",
                "year": "2015",
                "episode": 14,
                "Cast": "January Jones",
            },
            {
                "title": "Mad Men vostfr",
                "year": "2017",
                "episode": 20,
                "Cast": "Jon Hamm",
                "Type": "Drama",
            },
        ],
        "producer": "Matthew Weine",
    }
]

for d in lst:
    tmp = {}
    for s in d["series"]:
        tmp.setdefault((s["title"], s["year"]), []).append(s)
    d["series"] = []
    for (title, year), v in tmp.items():
        d["series"].append(
            {
                "title": title,
                "year": year,
                "episode": [s["episode"] for s in v],
                "Cast": [s["Cast"] for s in v],
                "Type": [s["Type"] for s in v if "Type" in s],
            }
        )
        if d["series"][-1]["Type"]:
            d["series"][-1]["Type"] = d["series"][-1]["Type"][0]
        else:
            del d["series"][-1]["Type"]


print(lst)

打印:

[
    {
        "class": "TV Shows With Five or More Seasons",
        "location": "usa",
        "series": [
            {
                "title": "Mad Men",
                "year": "2015",
                "episode": [10, 14],
                "Cast": ["Elisabeth Moss", "January Jones"],
            },
            {
                "title": "Mad Men vostfr",
                "year": "2017",
                "episode": [20],
                "Cast": ["Jon Hamm"],
                "Type": "Drama",
            },
        ],
        "producer": "Matthew Weine",
    }
]