1
votes

J'ai une liste qui contient plus de dict et je veux en supprimer un mais les dict sont dynamiques

donc j'ai une liste et j'y ai un dict, j'ai une fonction où demander avec 2 entrées quel dict ajouter, alors j'ai une autre fonction avec 1 entrée pour laquelle dict remove, est-ce possible de faire ça?

my_list = [{"a":"b"},{"e":"f"}]

si j'ajoute quelque chose comme {"e": "f"} devient

XXX

j'ai besoin d'une fonction qui supprime un dict comme {"c": "d"}

def remove_dict():
  delete = input("with dict want remove? ")

où le résultat devrait être p>

my_list = [{"a":"b"},{"c":"d"},{"e":"f"}]


3 commentaires

Pourquoi une liste de dictionnaires au lieu d'un simple dictionnaire? Vous pouvez alors faire del yourdict [key] .


Voulez-vous supprimer un dictionnaire qui a une clé "c" ? Ou un avec spécifiquement la paire clé-valeur "c:" "d" ?


@Guimoute qui dictent spécifiquement


3 Réponses :


0
votes

En supposant que vous cherchiez simplement à supprimer la valeur en spécifiant la clé du dictionnaire, vous pouvez faire ce qui suit:

remove_dict()
with dict want remove? {'c': 'd'}

my_list
[{'a': 'b'}, {'e': 'f'}]

spécifiez simplement la lettre sur demande et il devrait supprimer la valeur de votre liste de dictionnaires.

par exemple:

def remove_dict():
delete_value = input("with dict want remove? ")
for i in range(len(my_list)-1):
    if str(my_list[i]) == delete_value:
        del my_list[i]

juste une note: la façon dont il est configuré, vous n'avez pas besoin d'utiliser des guillemets (' ') dans votre entrée.

si vous voulez spécifier la valeur entière du dictionnaire (c'est-à-dire {"c": "d"}) alors cela fonctionnerait:

my_list = [{"a":"b"},{"c":"d"},{"e":"f"}]
my_list
[{'a': 'b'}, {'c': 'd'}, {'e': 'f'}]

remove_dict()
with dict want remove? c

my_list
[{'a': 'b'}, {'e': 'f'}]


7 commentaires

c'était ce que je cherchais


Ravi de l'entendre! Faites-moi savoir si vous avez encore des questions


N'oubliez pas de confirmer la bonne réponse afin que les personnes ayant la même question puissent s'y référer. @GiulioZorzi


Pourquoi s'embêter avec des listes et des index supplémentaires for i in range (len (my_list) -1): if list (my_list [i] .keys ()) == [delete_value]: del ma_list [i] ? Faites simplement pour un_dict dans ma_liste_de_dicts: if delete_value dans a_dict.keys (): del a_dict .


@Guimoute Bonjour, il a précisé dans ses commentaires qu'il n'était pas intéressé par la suppression de l'élément en fonction de la clé, mais de la combinaison clé + valeur réelle


Oui, mais vous souhaitez toujours parcourir les objets eux-mêmes et non une plage.


cela permet plus de flexibilité quant à l'élément que vous souhaitez appeler avec l'instruction for. Nous n'optimisons pas particulièrement la vitesse ici et comme le type d'entrée, le type d'élément de liste réel et le type de clé sont tous des types différents, il est agréable d'avoir cette flexibilité supplémentaire.



0
votes

vous pouvez simplement parcourir la liste des dictionnaires et vérifier si l'élément que vous souhaitez supprimer est une clé dans chaque dict.

with dict want remove? c
[{'a': 'b'}, {'e': 'f'}]

my_list = [{"a":"b"},{"c":"d"},{"e":"f"}]
delete = input("with dict want remove? ")
for index, dic in enumerate(my_list):
    if delete in dic:
        del my_list[index]
print(my_list)


0 commentaires

0
votes

semble que pour votre cas d'utilisation pour stocker vos données d'entrée dans un dict, il est plus approprié que dans une liste:

def remove_dict():
    key = input("with dict want remove? ")
    my_dict.pop(key) # you may want to check if the key is in the dict

et de supprimer:

my_dict = {"a":"b", "c":"d"}

def add_dict():
    add_key = input("insert key : ")
    add_value = input("insert value: ")
    my_dict[add_key] = add_value


0 commentaires