2
votes

Python: Comment supprimer des éléments d'un dictionnaire et le renvoyer sous forme de liste?

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


0 commentaires

8 Réponses :


1
votes

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)


0 commentaires

1
votes

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


0 commentaires

1
votes

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}


0 commentaires

1
votes

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


0 commentaires

1
votes

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]


0 commentaires

1
votes

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)


0 commentaires

1
votes

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:

https://docs.python.org/3/tutorial/datastructures.html


0 commentaires

0
votes
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']

0 commentaires