2017-09-21 7 views
1

Assez nouveau à Python et je ne peux pas comprendre cela. Je vais ajouter une clé à un dictionnaire et ça l'ajoute très bien. Je peux même mettre à jour cette même clé avec une nouvelle valeur, cependant quand je vais ajouter une deuxième clé au dictionnaire, elle n'ajoute pas la deuxième paire de valeurs de clé.Dictionnaire Python ne pas ajouter les touches suivantes après le premier

class CountedSet: 
    def __init__(self): 
     self.data = {} 
    def __iadd__(self,other): 
     if isinstance(other,int): 
      self.data[other] = self.data.get(other, 0) + 1 
      return self 
     elif isinstance(other,CountedSet): 
      #TODO::iterate through second countedSet and update self 
      return self 
    def __add__(self,obj): 
     for key, value in obj.data.items(): 
      if len(self.data) == 0: 
       self.data[key] = value 
      elif self.data[key]: 
       self.data[key] = self.data[key] + value 
      else: 
       self.data[key] = value 
     return self 
    def __getitem__(self,item): 
     if item in self.data: 
      return self.data.get(item) 
     else: 
      return None 
    def __str__(self): 
     for key, value in self.data.items(): 
      return("{%s,%s}" % (key,value)) 
a = CountedSet() 
a += 17 
a += 4 
print(a) 

Cette affiche simplement {} quand je 17,1 compterais voir {} {4,1 17,1}

+0

Votre problème est dans la déclaration de retour –

Répondre

3

Vos __str__ déclarations de mise en œuvre sur la première itération de la boucle:

def __str__(self): 
    for key, value in self.data.items(): 
     return("{%s,%s}" % (key,value)) # here 

Peut-être que vous voulez quelque chose comme:

def __str__(self): 
    return " ".join([{"{%s,%s}" % (k,v) for k, v in self.data.items()]) 

Ou, sans la compréhension:

def __str__(self): 
    items = [] 
    for key, value in self.data.items(): 
     items.append("{%s,%s}" % (key,value)) 
    return ' '.join(items) 
+0

me devança ... –

+0

Et ne pas oublier de remettre la valeur dans le second –

+0

@ whackamadoodle3000 yep –