Je voulais diviser une liste de dictionnaires en plusieurs listes de dictionnaires en fonction de la valeur d'une clé particulière de manière dynamique.
Actual_list = [{status:Pass,name:abc,loop_count:1},{status:Fail,name:abc,loop_count:1},{status:Fail,name:abc,loop_count:2},{status:Fail,name:abc,loop_count:2},]
Ici, la liste des dictionnaires contient des valeurs, qui doivent être divisées en fonction de la valeur-clé de loop_count. Chaque liste de séparateurs de dictionnaires doit contenir une valeur unique de loop_count
Expected_list =[ [{status:Pass,name:abc,loop_count:1}, {status:Fail,name:abc,loop_count:2}],[{status:Fail,name:abc,loop_count:1},{status:Fail,name:abc,loop_count:2}]]
Solution du problème
IIUC :
from itertools import groupby
Actual_list = [
{"status": "Pass", "name": "abc", "loop_count": 1},
{"status": "Pass", "name": "abc", "loop_count": 1},
{"status": "Fail", "name": "abc", "loop_count": 1},
{"status": "Fail", "name": "abc", "loop_count": 2},
{"status": "Fail", "name": "abc", "loop_count": 2},
]
nums, vals = [], {}
for k, g in groupby(
sorted(Actual_list, key=lambda k: k["loop_count"]),
lambda k: k["loop_count"],
):
vals[k] = list(g)
nums.append(k)
out = []
while any(vals.values()):
out.append([vals[n].pop(0) for n in nums if vals[n]])
print(out)
Impressions :
[
[
{"status": "Pass", "name": "abc", "loop_count": 1},
{"status": "Fail", "name": "abc", "loop_count": 2},
],
[
{"status": "Pass", "name": "abc", "loop_count": 1},
{"status": "Fail", "name": "abc", "loop_count": 2},
],
[{"status": "Fail", "name": "abc", "loop_count": 1}],
]
Aucun commentaire:
Enregistrer un commentaire