J'ai 2 dictionnaires:
KeyError: 0.0
et
for key, value in dict(Second).items():
for key, value in dict(First).items():
if Second[value] == First[value] :
del Second[key]
elif First[value]> Second[value]:
del Second[key]
Second
Je voudrais supprimer certaines valeurs dans le second dict avec des conditions: p>
1 - si la valeur dans le deuxième dict est
2 - si la valeur dans le deuxième dict == 0.0 alors supprimez le (k, v) au deuxième dict
Fanaly, nous avons le résultat:
Second = {'I': 0.18,'K': 1.0, 'S': 0.32}
Voici mon code:
Second = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.18, 'J': 0.0, 'K': 1.0, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.32, 'T': 0.0}
Mais ne fonctionne pas:
First = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.0, 'J': 0.0, 'K': 0.47, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.41, 'T': 0.0}
Quelqu'un peut-il m'aider!
3 Réponses :
Vous ne pouvez pas rechercher une valeur comme clé d'un dictionnaire. De plus, votre deuxième boucle vous fait parcourir le deuxième dictionnaire après avoir déjà effacé tous les éléments que vous souhaitez effacer.
Vous recherchez quelque chose de plus comme:
for key, value in Second.items():
if Second[key] < First[key] or Second[key] == 0.0:
del Second[key]
Parcourez le premier dict, car ce ne sera pas celui qui changera, et en fonction de vos conditions, filtrez les éléments
{'I': 0.18, 'K': 1.0}
sortie:
for k,v in First.iteritems():
if Second[k] < v or Second[k] == 0.0:
del Second[k]
Vous utilisez par erreur la valeur de l'élément plutôt que la clé pour tenter d'accéder à la valeur. De plus, vous rencontrerez des problèmes si vous essayez de muter le dict tout en l'itérant. À la place, vous pouvez utiliser la compréhension de dict.
Par exemple:
d1 = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.0, 'J': 0.0, 'K': 0.47, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.41, 'T': 0.0}
d2 = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.18, 'J': 0.0, 'K': 1.0, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.32, 'T': 0.0}
d2 = {k: v for k, v in d2.items() if v != 0 and v != d1[k]}
print(d2)
# {'I': 0.18, 'K': 1.0, 'S': 0.32}
Les clés sont des chaînes, pas des nombres. Donc
Deuxième [valeur]etc. n'a aucun sens.Qu'est-ce que
Nan_Admin?Pour la valeur de clé S,
0,32est inférieur à0,4 mais il est toujours là dans votre résultat final.