1
votes

Comparez 2 dictionnaires par valeur et déposez quelques k, v python

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 commentaires

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,32 est inférieur à 0,4 ​​ mais il est toujours là dans votre résultat final.


3 Réponses :


1
votes

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]


0 commentaires

1
votes

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]


0 commentaires

1
votes

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}


0 commentaires