1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #! /usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# Python v2.7
#############################################################################
def _creadict(c, d={}):
# recherche des enfants
for cle in d:
for cat, catpar in c:
if catpar==cle:
d[cle][cat] = {}
# recherche récursive
d[cle] = _creadict(c, d[cle])
return d
#============================================================================
def creadict(cats):
# simplification de la liste => [[cat, catparent], ...]
c = []
for i, (id1, id2, cat, idpar) in enumerate(cats):
if idpar==0:
c.append([cat, 0])
else:
for elem in cats:
if idpar==elem[0]:
c.append([cat, elem[2]])
break
# recherche des 'cat' sans parent (catpar==0)
d = {}
for cat, catpar in c:
if catpar==0:
d[cat] = {}
# recherche récursive des enfants
d = _creadict(c, d)
return d
#############################################################################
cats = ((1, 1, 'Cat1', 0), (2, 2, 'Cat2', 0), (3, 3, 'Cat3', 2), (4, 4, 'Cat4', 2), (5, 5, 'Cat5', 3), (6, 6, 'Cat6', 4), (7, 7, 'Cat7', 2))
d = creadict(cats)
print d |
Partager