J'ai jusqu'à présent ce code:

def name_counts(name_list):
    name_dict = {}
    for word in name_list:
        if word in name_dict:
            name_dict[word] += 1
        else:
            name_dict[word] = 1


print(name_counts(name_list))

Ce qui se traduit par:

Mais j'en ai besoin pour n'imprimer que les prénoms, pas les derniers. Comment ferais-je ça? Je sais que je devrais utiliser la fonction split mais à chaque fois que je le fais name_list.split(), elle retourne avec une erreur d'attribut.

1
user9660128 18 avril 2018 à 04:06

4 réponses

Meilleure réponse

Je créerais une variable temporaire au début de la boucle for qui contiendrait le nom de division, comme ceci:

for word in name_list:
  name = word.split()[0]
  if name in name_dict:
    name_dict[name] += 1
  else:
    name_dict[name] = 0

Notez que la fonction .split() renvoie un list, donc pour obtenir le prénom, vous devez obtenir l'élément à l'index 0.

J'espère que cela pourra aider!

0
Jono 2906 18 avril 2018 à 01:14

Ceci peut être réalisé sur une seule ligne en utilisant des listes de compréhension.

>>>from collections import Counter
>>>name_list = ["Davy Jones", "Davy Crockett", "George Washington"]
>>>Counter([name.split()[0] for name in name_list])
#result -->
Counter({'Davy': 2, 'George': 1})
0
Sjshovan 18 avril 2018 à 04:42

Le Counter du module de collecte fait exactement cela! Vous pouvez utiliser:

from collections import Counter
# get firstname from name
print(Counter(firstname))

EDIT: Je vous laisse comprendre comment analyser le prénom :)

1
TwistedSim 18 avril 2018 à 01:13

Tu es très proche! Ce que vous faites dans votre fonction en ce moment, c'est simplement de regarder le nom complet, tandis que les instructions indiquent que vous devriez simplement regarder le prénom et voir combien il est apparu. ce que vous devriez avoir est quelque chose comme ça. En parcourant chaque mot de la boucle, créez un tableau, disons name et réglez-le sur word.split(). Ensuite, comme dans votre code suivant, vérifiez si name[0] (le prénom) existe dans la liste et incrémentez name_dict[name[0]] si c'est le cas. Sinon, créez une nouvelle clé avec name[0] et réglez-la sur 1.

1
bluewind03 18 avril 2018 à 01:15