GOOGLE ADS

lundi 18 avril 2022

Diviser la liste des dictionnaires en plusieurs listes de dictionnaires par sa valeur en python

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

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...