J'ai fait ces tâches de vérification et je suis resté coincé. On m'a donné une liste de quelques mots et une chaîne suivie d'un texte. La tâche est que je dois compter le nombre de mots de la liste dans le texte et créer un dictionnaire où la clé est un mot et la valeur est le montant. Cela doit ressembler à ceci:
popular_words('''
When I was One
I had just begun
When I was Two
I was nearly new
''', ['i', 'was', 'three', 'near'])
Et la sortie:
{
'i': 4,
'was': 3,
'three': 0,
'near': 0
}
J'ai presque tout fait mais je ne sais pas comment ajouter un mot à ce dictionnaire qui n'est pas dans le texte (comme 'near': 3)
Voilà ce que j'ai:
result = {}
number = 0
list1 = []
words = '''
When I was One
I had just begun
When I was Two
I was nearly new
'''
check = ['i', 'was', 'three', 'near']
a = list(words.split())
for word in a:
if word.lower() in check:
wc = words.count(word)
result[word] = wc
print(result)
J'ai essayé:
for word in a:
if word.lower() in check:
wc = words.count(word)
if words.count(word) == 0:
result[word] = 0
else:
result[word] = wc
Mais ça ne marche pas :(
5 réponses
Tout d'abord, word.split () vous donne déjà une liste. Plus besoin de le reconvertir en liste.
Deuxièmement, ce que vous devriez faire est d'itérer par chèque (vous ne vous souciez que des mots en chèque), plutôt que par a.
Troisièmement, vous pouvez utiliser la compréhension du dictionnaire pour accélérer les choses:
a = words.lower().split()
results = {word:a.count(word) for word in check}
En passant en revue le code, words.split () est le même que list (words.split ()) Le code pour les résultats d'une manière pythonique (et plus rapide) de faire ce qui suit:
results = {}
for word in check:
results[word] = a.count(word)
from collections import Counter
words = '''
When I was One
I had just begun
When I was Two
I was nearly new
'''
check = ['i', 'was', 'three', 'near']
words = Counter(words.split())
newcounter = {}
for i in words:
if i.lower() in check:
newcounter[i.lower()] = words[i]
print(newcounter)
Votre code n'est pas très efficace, car vous parcourez tout le texte, mot par mot, mais utilisez ensuite .count(word)
qui boucle également tout le texte. Vous voudrez peut-être incrémenter un compteur (qui se trouve être votre dictionnaire) comme ceci:
if word.lower() in check:
if word in result:
word[result] += 1
else:
word[result] = 1
. Après avoir parcouru votre texte, vous pouvez parcourir votre liste de mots populaires et les ajouter au dic s'ils ne sont pas dans:
if not pop_word in result:
result[pop] = 0
Vous devez initialiser le dictionnaire de résultats à partir de la liste donnée de mots intéressants, puis augmenter le nombre chaque fois que vous trouvez un mot:
def popular_words(txt, wordlist):
result = { w.lower():0 for w in wordlist } # initialize count to 0
for word in txt.split():
w = word.lower() # only considere lower case
if w in result:
result[w] += 1 # increase for each occurence
return result
Essayez ceci, cela devrait être plus rapide que de vous répéter. La classe Counter présente l'avantage supplémentaire de gérer les mots introuvables dans le texte.
from collections import Counter
result = {k: Counter(words.lower().split())[k] for k in check}
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.