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 :(

0
Desiigner 16 avril 2018 à 17:33

5 réponses

Meilleure réponse

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)
3
David L 16 avril 2018 à 14:40
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)
2
Yono 16 avril 2018 à 14:43

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
1
Jean Rostan 16 avril 2018 à 14:40

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
0
Serge Ballesta 16 avril 2018 à 14:47

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}
4
bphi 16 avril 2018 à 14:48