Je dois dire que je suis plutôt nouveau sur Python et je ne sais pas comment résoudre mon problème.
J'ai une liste qui ressemble à ceci
ligne = ['DR', '0.8282312925170068']
Et je veux qu'il ait un élément supplémentaire:
ligne = ['DETECTION RATE', 'DR', '0.8282312925170068'].
Le problème est que je dois mettre le bon attribut pour chaque liste. Ce que j'ai fait
for line in f.readlines():
ligne = line.split()
for step in {
"DR" : (ligne = ["Detection Rate"] + ligne),
"FAR" :(ligne = ["False Alarm Rate"] +ligne),
"FNR" :(ligne = ["False N Rate"] + ligne),
"MOTA":(ligne = ["MOTA"] + ligne),
"MOTP":(ligne = ["MOTP"] + ligne),
"PFR":(ligne = ["PFR"] + ligne),
"Precision":(ligne = ["Precision"] + ligne),
}.get(ligne[0]):step()
Mais cela ne fonctionne pas car (ligne = ["Detection Rate"] + ligne) n'est pas une fonction.
Comment puis-je faire ceci?
3 réponses
C'est trop complexe et syntaxiquement incorrect. Puisque vous avez juste besoin de préfixer, créez simplement un mot-clé de dictionnaire => préfixe:
d = {"DR":"Detection Rate","FAR":"False Alarm Rate","FNR":"False N Rate"}
Puis ajoutez la valeur (et si le jeton n'est pas dans le dictionnaire, répétez la clé, il couvre apparemment la moitié de vos valeurs):
for line in f:
ligne = line.split()
key = ligne[0]
ligne.insert(0,d.get(key,key))
EDIT: les commentaires font allusion à un deux-points après le premier mot. Changez simplement en:
key = ligne[0].rstrip(":")
ligne.insert(0,d.get(key,key)+":")
Remarques:
insert
fonctionne sur place: enregistre une création de liste temporaire (ne sauvegarde pas le décalage des éléments, cependant)for line in f
évite de lire le fichier immédiatement. Il lit simplement ligne par ligne.
Faire une liste de nouvelle variable:
Vlist=['Detection Rate','False', 'Alarm Rate','False N
Rate','MOTA','MOTP','PFR','Precision']
Faire un vide pour les nouvelles lignes (ajoutées avec une nouvelle variable) dans txt
newline=[]
Boucle à partir du premier newV et newline dans le fichier et concatène ensemble
for line,newV in zip(f.readlines(),Vlist):
ligne=line.split()
newV+=ligne
newline+=' '.join(newV)
Réécrire les sauts de ligne dans le fichier
for i in newline:
f.write(i)
Cela ne fonctionne pas car { }
est un dictionnaire (une structure de données) et votre code essaie de l'utiliser comme une instruction switch
.
Configurez d'abord vos équivalences:
translation = {
"DR" :"Detection Rate",
"FAR" :"False Alarm Rate",
"FNR" :"False N Rate"}
Il n'est pas nécessaire de traduire des littéraux qui se traduisent pour eux-mêmes.
for line in f.readlines():
ligne = line.split()
ligne = [translation.get(ligne[0],ligne[0])] + ligne
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.