2 votes

Pensez à itérer avec items()

Je parcours un dictionnaire pour supprimer certaines valeurs dans un autre dictionnaire. Cependant, pylint n'aime pas mon code et me suggère d'utiliser la méthode .items(). Je découvre cette méthode et je ne comprends pas comment obtenir le même résultat avec celle-ci.

Mes dictionnaires ressemblent à ça :

itemsToDelete = {
  1: {
  "page1": "item1",
  "page1": "item2",
  "page1": "item3"
  },
  2: {
  "page3": "item1",
  "page3": "item2",
  "page3": "item3"
  },
  3: {
  "page5": "item1",
  "page5": "item2",
  "page5": "item3"
  }
}

contents = {
  1: {
  "page1": "item1",
  "page1": "item2",
  "page1": "item3",
  "page1": "item4",
  "page1": "item5"
  },
  2: {
  "page3": "item1",
  "page3": "item2",
  "page3": "item3"
  },
  3: {
  "page5": "item1",
  "page5": "item2",
  "page5": "item3"
  }
}

En fait, je les parcours comme ceci :

for package in itemsToDelete:
    for page in itemsToDelete[package]:
        for item in itemsToDelete[package][page]:
            if item in contents[package][page]:
                del contents[package][page][item]

Comment pourrais-je faire la même chose avec items() ? Merci pour votre aide

2voto

qouify Points 1228

Pylint vous avertit que vous pouvez éviter les redondances itemsToDelete[package] en utilisant l'option items méthode des dictionnaires.

Essayez plutôt ceci :

for package, package_items in itemsToDelete.items():
    for page, package_item in package_items.items():
        for item in package_item:
            if item in contents[package][page]:
                del contents[package][page][item]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X