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?

1
Greg Symsym 12 avril 2018 à 14:29

3 réponses

Meilleure réponse

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.
1
Jean-François Fabre 12 avril 2018 à 12:11

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)
1
hikaru89 12 avril 2018 à 11:59

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
2
BoarGules 12 avril 2018 à 11:42