J'ai créé ce main_dict et je veux voir si main_dict[x]["Description"] existe ou non, et si oui, le supprimer. Où x est 'pins', 'nails', 'board', etc ...

main_dict = {
'pins':
    {
        'Category': ['General'],
        'Contact': ['Mark'],
        'Description': ['This', 'is', 'a']
    },
'nails':
    {
        'Category': ['specific'],
        'Contact': ['Jon'],
        'Description': ['This', 'is', 'a', 'description']
    },
'board':
    {
        'Category': ['General'],
        'Contact': ['Mark'],
        'Description': ['This', 'is', 'a']
    },
'hammer':
    {
        'Category': ['tools'],
        'Contact': ['Jon'],
        'Description': ['This', 'is', 'a', 'description']
    }
}

J'ai essayé ceci:

for x in main_dict:
   del main_dict[x]["Description"]

Cela renvoie une erreur si main_dict[x]["Description"] n'existe pas.

Cela ne fonctionne pas non plus:

if main_dict[x]["Description"] in mainDict[x]:
     del main_dict[x]["Description"]
0
Heyya 17 avril 2018 à 00:18

4 réponses

Meilleure réponse

Cela le supprimerait de tous les sous-dictionnaires qui le contiennent:

main_dict = {
    'pins':
        {
            'Category': ['General'],
            'Contact': ['Mark'],
            'Description': ['This', 'is', 'a']
        },
    'nails':
        {
            'Category': ['specific'],
            'Contact': ['Jon'],
            'Description': ['This', 'is', 'a', 'description']
        },
    'board':
        {
            'Category': ['General'],
            'Contact': ['Mark'],
            'Description': ['This', 'is', 'a']
        },
    'hammer':
        {
            'Category': ['tools'],
            'Contact': ['Jon'],
            'Description': ['This', 'is', 'a', 'description']
        }
}

for key, value in main_dict.items():
    if isinstance(value, dict) and 'Description' in value:
        del value['Description']

Résultat:

{
    'pins':
        {
            'Category': ['General'],
            'Contact': ['Mark'],
        },
    'nails':
        {
            'Category': ['specific'],
            'Contact': ['Jon'],
        },
    'board':
        {
            'Category': ['General'],
            'Contact': ['Mark'],
        },
    'hammer':
        {
            'Category': ['tools'],
            'Contact': ['Jon'],
        }
}
0
martineau 16 avril 2018 à 23:07

Vous utilisez simplement la méthode pop() avec l'argument par défaut (par exemple None) pour omettre de vérifier si "Description" existe comme clé.

for i in main_dict:
    main_dict[i].pop("Description", None)

Remarque: ce n'est pas une bonne pratique de changer un objet itérable tout en itérant dessus.

4
vishes_shell 16 avril 2018 à 21:22

Voici une solution simple:

for x in main_dict:
    if "Description" in main_dict[x]:
        main_dict[x].pop("Description")
2
OneRaynyDay 16 avril 2018 à 21:19

Pour vérifier si une clé se trouve dans un dictionnaire, essayez if key in dict pour archiver des dictionnaires imbriqués, vous suivez la même logique:

for key in main_dict:
    if 'Description' in main_dict[key]:
        # do something

Pour supprimer un élément, vous devez en effet utiliser le {{X0} } déclaration. J'ai copié votre main_dict, et j'ai exécuté la même chose que vous:

for x in main_dict: 
    del main_dict[x]['Description']

Peut-être que vous essayez de le supprimer deux fois?

0
leoschet 16 avril 2018 à 21:32