将字典列表中的重复值与某个键组合
combine duplicates values in list of dictionaries with a certain key
我有一大堆项目,我需要找到一种方法来重新组合那些具有重复值的项目。我需要在一系列列表中找到具有相同 title
和 year
值的字典,并为 episode
和 Cast
创建一个新列表,其中只保留一个字典.如果没有匹配的 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",
}
]
我有一大堆项目,我需要找到一种方法来重新组合那些具有重复值的项目。我需要在一系列列表中找到具有相同 title
和 year
值的字典,并为 episode
和 Cast
创建一个新列表,其中只保留一个字典.如果没有匹配的 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",
}
]