J'ai essayé un exercice qui m'oblige à supprimer des mots dans un dictionnaire contenant des mots de 7 caractères ou moins. Jusqu'à présent, j'ai essayé d'utiliser la méthode .values () pour obtenir uniquement les mots entre crochets, et ainsi créer une liste pour stocker ces mots. Cependant, je rencontre un problème avec l'utilisation de la méthode pop où j'obtiens
"TypeError: l'objet 'str' ne peut pas être interprété comme un entier".
Voici mon code:
word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],
'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}
def main():
edited_synonyms = remove_word(word_dict)
print(edited_synonyms)
def remove_word(word_dict):
synonyms_list = word_dict.values()
new_list = []
for i in synonyms_list:
new_list.extend(i)
for word in new_list:
letter_length = len(word)
if letter_length <= 7:
new_list.pop(word)
return new_list
main()
8 Réponses :
list.pop prend comme argument l'index de l'élément que vous voulez faire apparaître dans la liste, mais lorsque vous faites new_list.pop (word) , vous êtes fournissant réellement l'élément lui-même, d'où l'erreur.
D'après la documentation: https: / /docs.python.org/3/tutorial/datastructures.html
list.pop ([i])
Supprimez l'élément à la position donnée dans la liste et renvoyez-le. Vous pouvez facilement résoudre ce problème en utilisant la compréhension du dictionnaire, où vous n'incluez que des valeurs dans votre liste, avec une longueur> 7
Pour résoudre ce problème, trouvez simplement l'index du mot que vous voulez afficher via list.remove()
Donc, la ligne
XXX
deviendra
['communicate', 'manifest', 'disclose', 'unhurried', 'leisurely']
Mais une meilleure approche pourrait être d'utiliser une compréhension de liste comme celle-ci
word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],
'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}
#Iterate through the values of the list and pick one with length > 7
res = [v for value in word_dict.values() for v in value if len(v) > 7 ]
print(res)
Votre programme est correct. Toutes les manières dont vous avez besoin pour ajouter une valeur index dans pop.
Code modifié:
>>> main() ['exhibit', 'communicate', 'manifest', 'disclose', 'unhurried', 'leisurely', 'behind', 'slack']
>>> def remove_word(word_dict):
synonyms_list = word_dict.values()
new_list = []
for i in synonyms_list:
new_list.extend(i)
for word in new_list:
letter_length = len(word)
if letter_length <= 7:
new_list.pop(new_list.index(word)) # Modified line
return new_list
Essayez ceci:
{'show': ['communicate', 'manifest', 'disclose'], 'slow': ['unhurried', 'leisurely']}
Sortie :
outp = {k: [v for v in word_dict[k] if len(v)<=7 ]for k in word_dict}
Dans une liste , vous pouvez afficher des éléments en fonction de l'index.
word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],
'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}
def main():
edited_synonyms = remove_word(word_dict)
print(edited_synonyms)
def remove_word(word_dict):
synonyms_list = word_dict.values()
new_list = list()
for i in synonyms_list:
new_list.extend([word for word in i if len(word) > 7])
return new_list
main()
Personnellement, je le ferais comme ceci:
for key in word_dict.keys():
word_dict[key] = [x for x in word_dict[key] if len(x)>7]
Ou vous pouvez utiliser la propriété remove de list de la manière suivante: -
print(new_list)
for word in new_list:
print(word)
letter_length = len(word)
if letter_length <= 7:
new_list.pop(new_list.index(word))
Autre manière: -
for word in new_list:
print(word)
letter_length = len(word)
if letter_length <= 7:
new_list.remove(word)
Vous devez utiliser la fonction remove au lieu de pop
La fonction remove () prend un seul élément comme argument.
La fonction pop () prend un seul argument (index) et supprime l'élément présent à cet index.
Plus de détails:
word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],
'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}
res =[]
for i in word_dict:
tmp =[j for j in word_dict[i] if len(j)<=7]
res.extend(tmp)
print(res)
# output ['display', 'exhibit', 'convey', 'gradual', 'late', 'behind', 'tedious', 'slack']