2017-10-09 12 views
-3

En Python, je suis en train de revenir:erreur de type en essayant de trier une liste d'un fichier

  • une liste triée des mots uniques
  • le compte du nombre d'occurrences dans un fichier

Je continue à obtenir l'erreur:

TypeError: '<' not supported between instances of 'int' and 'str'.

Mon code est le suivant:

def countWords(ifile): 
    lst1=[] 
    infile=open(ifile,'r') 
    lines=(inifle.read()).lower() 
    for element in lines.split(): 
     lines.replace(',',' ') 
     sct=lines.count(element) 
     lst1.append(element) 
     lst1.append(sct) 
    return lst1.sort() 
    infile.close() 

Qu'est-ce que je fais mal?

+2

L'erreur vous indique quel est le problème: vous essayez de trier une liste contenant à la fois des chaînes et des nombres. Qu'est-ce qui devrait être considéré comme plus grand «9» ou «chien»? – Julien

+0

'dog' wold être considéré comme plus grand –

+0

Si votre question a reçu une réponse, vous pouvez [accepter le plus utile] (https://stackoverflow.com/help/someone-answers). –

Répondre

0

Le script n'est pas bon, le problème est dans le tri. Vous obtenez cette erreur lorsque vous essayez de trier 'str' et 'int'. Le script fonctionne correctement si vous n'essayez pas de le trier et également sur une autre note que vous devez fermer le fichier avant de renvoyer la liste.

+0

Le problème est que je dois trier les deux dans une liste. Le mot doit venir en premier, puis le nombre de ses occurrences. –

+0

Est-il obligatoire de le faire en utilisant une liste? Vous pouvez utiliser un dictionnaire correspondant à votre objectif de manière plus efficace car les mots peuvent être utilisés comme clés et les comptes comme valeurs. – nishgaba

1

I am trying to return a sorted list of unique words and the count of the number of occurrences within a file.

Je recommande d'utiliser la structure de données collections.Counter - son but principal est de compter les choses.

from collections import Counter 

def countWords(ifile): 
    c = Counter() 
    with open(ifile) as f: 
     for line in f: 
      c.update(line.strip().split()) 

    return c.most_common() 

most_common rendements occurrences de mots dans l'ordre décroissant ou en fréquence. Un tri supplémentaire n'est pas requis.


Si votre fichier est assez petit, vous pourriez condensent votre fonction un peu:

def countWords(ifile): 
    with open(ifile) as f: 
     c = Counter(f.read().replace('\n', ' ').split()) 
    return c.most_common()