2017-09-21 6 views
1

Pythonにはまったく新しく、これを理解することはできません。私は辞書にキーを追加してそれをうまく追加します。その同じキーを新しい値で更新することもできますが、2番目のキーを辞書に追加すると、2番目のキー値のペアは追加されません。Python辞書は、最初の文字の後に後続のキーを追加しません。

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) 

これは、単に{17,1} Iは、forループの最初の反復に{17,1}、{4,1}

+0

あなたの問題は –

答えて

3

あなた__str__実装リターンを表示することが予想されるときに出力:

を理解せずに、

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

または::

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

はたぶん、あなたのような何かをしたい

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

です。どうもありがとうございます。あなたがデバッグするときに目にしているように見える、馬鹿げた、愚かな過ちであるようです。 –

+0

...それを私にビートそして、私のオハイオ州私のwhackamadoodle3000うん –

+0

に値を返すことを忘れないでくださいreturn文 –

関連する問題