Je souhaite créer un dictionnaire avec une liste de valeurs pour plusieurs clés avec une seule boucle dans Python3. Pour moi, l'exécution de l'heure et l'empreinte mémoire sont de la plus haute importance car le fichier que mon script Python3 lit est assez long.
J'ai déjà essayé le script simple suivant: p> le format de mon home / utilisateur / test code> est: p> (res_dict['p_avg'], res_dict['p_y']) = [(float(line.split(" ")[5].split(":")[1]), float(line.split(" ")[6].split(":")[1])) for line in f]
3 Réponses :
Vous pouvez initialiser votre dict code> pour contenir les paires de chaînes / liste, puis appendez-les directement lorsque vous ithétiez chaque ligne. En outre, vous ne voulez pas continuer à appeler split () code> sur ligne code> sur chaque itération. Plutôt, appelez simplement une fois et enregistrer sur une variable locale et une index de cette variable.
Oui, vous avez raison sur le nom de la dict et oui, je voulais dire l'indice 6. J'ai simplifié mon programme et fait une faute de frappe.
Vous pouvez utiliser defaultDict code>. Il n'est pas nécessaire de diviser la ligne à chaque fois et de le rendre plus lisible, vous pouvez utiliser un Lambda pour extraire les champs de chaque élément. from collections import defaultdict
res = defaultdict(list)
with open('/home/user/test', 'r') as f:
for line in f:
items = line.split()
extract = lambda x: x.split(':')[1]
res['p_avg'].append(extract(items[5]))
res['p_y'].append(extract(items[6]))
res['m_avg'].append(extract(items[1]))
res['m_y'].append(extract(items[2]))
Je conviens que la fractionnement des lignes a d'abord du sens mais n'est-il pas possible d'assigner toutes les valeurs des clés avec une seule ligne
Vous pouvez simplement définir des attributs dicter: puis appendez-leur directement à eux: p> p. N'utilisez jamais de noms de variables égaux à des mots intégrés, tels que
dict code>, liste code> etc. Il peut causer de nombreuses erreurs diverses! P> p>
Veuillez ajouter un exemple d'entrée et vérifier les empreintes de votre question. De plus, je ne vois pas un
Imprimer code> ou quoi que ce soit donc idk comment vous avez votre sortie. S'il vous plaît réparer cela aussi.Le code de votre question n'exécutera pas car il n'y a pas de
mse_y code> variable défini. Vous ne devriez pas non plus donner au même nom de variables que les intégrées telles quedict code>. Une optimisation assez évidente ne serait pas de ne pas diviser la même ligne 4 fois, mais il semble que vous n'aviez absolument aucun effort pour optimiser les choses vous-même. Je vous suggère également de profil de votre script avant d'essayer de l'optimiser pour voir où il dépense la majeure partie de son temps d'exécution. Voir Comment pouvez-vous profiler un script Python?