In [3]:
import csv

In [5]:
with open('data.csv') as f:
    spam = csv.DictReader(f)
    trainset = list(spam)

In [12]:
trainset  = sorted(trainset, key=lambda k: k['Play'])

In [15]:
len(trainset)


Out[15]:
15

In [52]:
class v:
    def __init__(self):
        self.lst={}
        
    def AddItem(self,values):
        
        if len(values)<=0:
            return
        print values[0]
        if values[0] in self.lst.keys():
            self.lst[values[0]].AddItem(values[1:])
        else:
            self.lst[values[0]]= v()
            self.lst[values[0]].AddItem(values[1:])
    def printeverything(self,level=0):
        #print 
        for itm in self.lst.keys():
            thespace = '----'*level
            print(thespace+itm)
            self.lst[itm].printeverything(level=level+1)

In [55]:
class Core:
    def __init__(self,name=None,occurence=0):
        self.name = name
        self.occurence =occurence
        self.sons={}
    def AddItem(self,items):
        if len(items)<=0:
            return
        if items[0] in self.sons.keys():
            self.sons[items[0]].occurence+=1
            self.sons[items[0]].AddItem(items[1:])
        else:
            self.sons[items[0]] = Core(name=items[0],occurence=1)
            self.sons[items[0]].AddItem(items[1:])
    def printeverything(self,level=0):
        #print 
        thespace = '----'*level
        print(thespace+str(self.name)+':'+str(self.occurence))
        for itm in self.sons.keys():
            self.sons[itm].printeverything(level=level+1)

In [56]:
root = Core()
for i in trainset:
    root.AddItem((i['Outlook'],i['Temp'],i['Humidity'],i['Windy'],i['Play']))

In [57]:
root.printeverything()


None:0
----Rainy:5
--------Mild:3
------------High:2
----------------FALSE:1
--------------------Yes:1
----------------TRUE:1
--------------------No:1
------------Normal:1
----------------FALSE:1
--------------------Yes:1
--------Cool:2
------------Normal:2
----------------FALSE:1
--------------------Yes:1
----------------TRUE:1
--------------------No:1
----Overcast:5
--------Hot:2
------------High:1
----------------FALSE:1
--------------------Yes:1
------------Normal:1
----------------FALSE:1
--------------------Yes:1
--------Mild:1
------------High:1
----------------TRUE:1
--------------------Yes:1
--------Cool:2
------------High:1
----------------FALSE:1
--------------------No:1
------------Normal:1
----------------TRUE:1
--------------------Yes:1
----Sunny:5
--------Hot:2
------------High:2
----------------TRUE:1
--------------------No:1
----------------FALSE:1
--------------------No:1
--------Mild:2
------------High:1
----------------FALSE:1
--------------------No:1
------------Normal:1
----------------TRUE:1
--------------------Yes:1
--------Cool:1
------------Normal:1
----------------FALSE:1
--------------------Yes:1

In [ ]: