J'ai écrit un script python qui analyse beaucoup de données et nettoie-le conformément à l'exemple ci-dessous:
input_list = [[a,b,c,0.5], [a,b,d,1], [a,b,e,1], [a,b,c,0.3], [a,b,c,0.2], [a,b,f,0.6], [a,b,f,0.4], [a,b,g,1]] output_list = [[a,b,c,1], [a,b,d,1], [a,b,e,1], [a,b,f,1], [a,b,g,1]]
5 Réponses :
input_list = [['a','b','c',0.5], ['a','b','d',1], ['a','b','e',1], ['a','b','c',0.3], ['a','b','c',0.2], ['a','b','f',0.6], ['a','b','f',0.4], ['a','b','g',1]]
output_list = []
d = {}
for i in input_list:
key = (i[0], i[1], i[2])
d[key] = i[3] + (d[key] if key in d else float(0))
for k, v in d.iteritems():
output_list.append([
k[0], k[1], k[2], v
])
# print output_list
Merci, c'est génial. J'avais jamais pensé à utiliser des dictionnaires pour cela, c'est donc un grand moment d'apprentissage! Merci beaucoup!
Depuis que vous ne savez pas combien d'éléments correspondront et que vous devez garder une trace de ce que vous avez trouvé pour des clés spécifiques jusqu'à présent, à l'aide d'un dict en tant que type de données intermédiaire.
Voici une solution de travail : p> Qu'est-ce que cela fait: p> dans Python 3, la dernière ligne serait meilleure comme suit: p>
Ceci est une bonne usecase de iTertools.groupby , et cela fonctionne pour les deux Nous regroupons essentiellement tous les éléments avec les mêmes premiers éléments, résumant les 4ème éléments de tous ces groupes et crée la liste de résultats p> la sortie sera p> Une autre approche consiste à utiliser un dictionnaire, avec la clé étant les 3 premiers éléments de la liste et résumant les valeurs du 4ème élément P> python2 code> et python3 code>. input_list = [['a','b','c',0.5], ['a','b','d',1], ['a','b','e',1], ['a','b','c',0.3], ['a','b','c',0.2], ['a','b','f',0.6], ['a','b','f',0.4], ['a','b','g',1]]
dct = {}
#Iterate through input list
for x,y,z, a in input_list:
#Take the first 3 elements as the key
k = x,y,z
#Add up 4th value for common first 3 elements
dct.setdefault(k,0)
dct[k]= a+dct[k]
#Convert dictionary back to list
res = [ [x,y,z,int(v)] for (x,y,z), v in dct.items()]
print(res)
Génial, heureux d'aider, s'il vous plaît uplifier ou accepter si la réponse vous a aidé @lolo :)
Merci à @lolo pour la uppote, j'ai également inclus une manière plus courte d'utiliser une approche basée sur le dictionnaire comme mise à jour de ma réponse, s'il vous plaît jeter un oeil
Je pense avoir une réponse pour vous: sortie: p>
Que diriez-vous de quelque chose comme ça? Vous pouvez décompresser des valeurs telles que ceci * x, y = 1,2,3,4 code> dans le python moderne mais je Ne pense pas que legacy python a cette fonctionnalité. P> p>
Ce serait génial si vous pouvez inclure votre code d'origine afin que nous puissions voir ce que vous avez fait :)
Montrez votre code, puis nous nous aidons à vous améliorer et à l'obtenir plus imbriqué