0
votes

Pourquoi le dictionnaire par défaut de mon code continue-t-il de se développer?

J'ai un dictionnaire par défaut et je l'exécute à travers quelques boucles pour rechercher certaines chaînes dans le dictionnaire. Les boucles ne font pas vraiment rien append sur le dictionnaire pour le moment car il s'avère, pendant la boucle, de nouveaux articles continuent d'être annexé au dictionnaire et que le dictionnaire final se termine plus gros que l'original avant la boucle. J'essaie d'identifier l'erreur pour toujours, mais maintenant, il est tard et je n'ai aucune idée de ce qui cause cela!

from collections import defaultdict
dummydict = defaultdict(list)    
dummydict['Alex'].append('Naomi and I love hotcakes')
dummydict['Benjamin'].append('Hayley and I hate hotcakes')
part = ['Alex', 'Benjamin', 'Hayley', 'Naomi']
emp = []
for var in dummydict:
    if 'I' in dummydict[var]:
        emp.append(var)
for car in part:
    for key in range(len(dummydict)):
        print('new len', len(dummydict))
        print(key, dummydict)
        if car in dummydict[key]:
            emp.append(car)
print(emp)
print('why are there new values in the dictionary?!', len(dummydict), dummydict)


1 commentaires

Pouvez-vous poster une impression ou quelque chose? Votre dict devrait avoir 2 clés: Alex et Benjamin


3 Réponses :


2
votes
if car in dummydict[key]:
key being an integer, and your dict being initially filled with only string as keys, this will create a new value in dummydict for each key.  

0 commentaires

1
votes

Accéder aux touches manquantes comme dans MandummyDict [Key] ajoutera ces clés à la valeur par défaut. Notez que clé est un int , pas la valeur à cette position, comme pour la touche de la plage (LEN (LummyDict)) ITERATES Index, non la dict ou ses clés.


0 commentaires

1
votes

Voir le Docs : < BlockQuote>

Lorsque chaque touche est rencontrée pour la première fois, elle n'est pas déjà dans la cartographie; Donc, une entrée est automatiquement créée à l'aide de la fonction par défaut_factory qui renvoie une liste vide.

Par exemple, ce code affichera un médicament-écrit avec une valeur de la valeur, car il suffit d'accéder à MandmyDict [clé] ajoutera la clé à la dicte si cette touche n'est pas déjà là. . xxx

sorties: xxx

Votre problème est que dans votre boucle, vous faites des choses comme DummyDict [ Touche] et MICHYDICT [var] , qui ajoute ces touches.


0 commentaires