J'apprécierais que quelqu'un puisse m'aider à résoudre l'exercice suivant.
Ecrire une fonction qui prend une chaîne contenant des mots séparés par des espaces et crée un dictionnaire où les clés correspondent aux derniers caractères des mots de la chaîne , tandis que les valeurs associées correspondent aux listes dont les mots se terminent par ce caractère.
De plus, les listes doivent être triées lexicographiquement
Example
def dictionary (string):
mydict = {}
mylist = string.split()
mylist2 = []
for word in mylist:
mylist2.append(word[-1])
mydict = dict((el,(word[-1] for word[-1] in mylist)) for el in mylist2)
return mydict
Doit renvoyer le dictionnaire suivant
{'s':['This'], 'l':['will'], 'e':['be', 'experience'], 'n':['an'], 'g':['amazing']}
J'ai une idée de la façon dont l'exercice devrait être résolu. Cependant, étant donné que je suis encore un débutant en Python, j'ai du mal.
La première chose que j'ai faite a été de créer un dictionnaire vide. Deuxièmement, j'ai converti la chaîne de mots en une liste en utilisant la méthode split . Ensuite, j'ai créé une autre liste qui prend le dernier caractère des mots de la première liste de chaînes et le met dans la nouvelle liste.
J'ai utilisé dict pour mettre le éléments de la deuxième liste comme clés dans mon dictionnaire qui fonctionne assez bien. Le problème est que je ne peux pas mettre la liste des mots correspondants comme valeurs.
Voici mon code:
string = "This will be an amazing experience"
4 Réponses :
Vous n'avez pas besoin de deux listes, l'algorithme est assez simple:
result = {}
for word in string.split():
key = word[-1]
if key not in result:
result[key] = []
result[key].append(word)
Il existe des moyens de raccourcir cela en utilisant dict.setdefault ou defaultdict , mais c'est l'idée de base.
Vous pouvez utiliser un collections.defaultdict pour créer un dictionnaire avec une liste vide avec une valeur par défaut. Ensuite, en parcourant la liste de mots, vous pouvez extraire le dernier caractère comme clé et ajouter le mot à la liste de valeurs pour cette clé
{'s': ['This'], 'l': ['will'], 'e': ['be', 'experience'], 'n': ['an'], 'g': ['amazing']}
La sortie sera
import collections
def dictionary(string):
#Dictionary with default value as empty list
mydict = collections.defaultdict(list)
#Iterate over list of words
for word in string.split():
#Take last character and add word to the value list for that character
last_char = word[-1]
mydict[last_char].append(word)
return dict(mydict)
print(dictionary("This will be an amazing experience"))
st = "This will be an amazing experience"
def func(st):
d={}
for v in st.split(' '):
if v[-1] in d:
d[v[-1]].append(v)
else:
d[v[-1]]=[v]
return d
print(func(st))
Pourriez-vous s'il vous plaît ajouter des informations textuelles? Comment votre extrait de code aide-t-il exactement à résoudre le problème?
Pour la partie tri lexicographique, vous devrez vous rappeler de trier les listes une fois que vous les avez générés:
my_string = "This will be an amazing experience"
def make_dict(string):
my_dict = {}
for word in string.split():
my_dict.setdefault(word[-1], []).append(word)
for l in my_dict.values():
l.sort()
return my_dict
print(make_dict(my_string))
Une autre possibilité est de créer des tas, plutôt que des listes, puis rapidement générer des listes triées à partir de ces tas. En fonction de votre cas d'utilisation exact, votre le kilométrage peut varier.
Cela m'a vraiment aidé. Y a-t-il un livre ou un site Web que vous recommanderiez de lire pour apprendre tout cela? Merci beaucoup
Salut @ alex108. De rien! J'ai personnellement appris Python simplement en faisant beaucoup de projets et en recherchant des problèmes sur Google, je devais trouver des réponses à StackOverflow :). Souvent, si vous avez une question, quelqu'un d'autre l'aura déjà posée - parfois il faut un peu de recherche pour l'obtenir, mais cela deviendra plus facile à mesure que vous vous améliorerez en langage Python.
Je pense que je gagnerais vraiment à lire toute la documentation officielle de Python, qu'en pensez-vous? Combien de temps vous a-t-il fallu pour maîtriser Python? Juste curieux.
@ alex108, je dirais quelques mois - même si je ne pense pas que j'arrêterai jamais d'apprendre de nouvelles choses sur Python (et la programmation en général!). La documentation officielle est une excellente ressource. Je vous recommande vivement de lire les parties explicatives des pages telles que la documentation du module re si vous vous trouvez en utilisant re , mais je ne sais pas combien vous allez gagner à simplement tout lire en une seule fois - personnellement, j'apprends toujours mieux en comprenant les choses que j'ai besoin de les appliquer.