2016-10-22 4 views
1

簡単に管理できるツリークラスを定義しようとしています(ノードを追加して子を取得し、dfsやbfsスタイルでそれを歩きます)が、私はちょっとだけPythonについて知っています私のコードを実行しているときにエラーで立ち往生:ツリークラスとしてのリストの辞書

AttributeError: 'Tree' object has no attribute 'get'

は、これは私のコードで、今では私は、ノードの追加を実装しました:

class Tree(dict): 
    def __init__(self): 
     self = {} 

    def add(self, node, child): 
     if self.get(int(node)): 
      childs = self.get(int(node)) 
      childs.append(int(child)) 
      self.update({int(node):childs}) 
     else: 
      self.update({int(int(node)):[int(child)]}) 

def main(): 
    tot = int(input("Cantidad de relaciones: ")) 
    t = Tree() 
    for i in range (0, tot): 
     for i in range (0,1): 
      a = [] 
      a.extend(input().split()) 
     t.add(a[0], a[1]) 
    print(t) 

main() 

答えて

1

dictからそれを継承します!

getおよびupdateは、辞書データ型のメソッドです。

コード:class Tree(object):class Tree(dict):に置き換えてください。エラーが解決されます。

また、あなたのコードであなたのアイデアはstrageです。 Pythonは既にdictlistのデータ型を持つツリー状のデータ構造を実装しています。それだ

a = { 
    'a': [1, 2, 3], 
    'b': { 
     'c': [33, 44, 55] 
     'd': 123, 
    } 
} 

Python data structures

+0

...ありがとう!私は今、別の問題を抱えています。理由はわかりませんが、リストを生成していませんが、値とキーをオーバーライドしています。たとえば、この関係を追加するとします:1 2、1 3; dictは{1:[2,3]の代わりに{1:3}を持っています – Fjallbacka

+0

私は入力文字列をスペース 'input()。split()'で分割したと思います。それを価値のあるキーとして辞書に追加します。 より包括的なアプローチが必要 – Broly

+0

いいえ、間違いは、リストとしてではなく数値としての値を初期化したことです。今は動作しています(誰もが見ることができるように私のコードを編集します) – Fjallbacka

関連する問題