使用python从csv文件构建树

使用python从csv文件构建树,python,csv,tree,Python,Csv,Tree,我的csv文件的格式如下 Col1 Col2 a b b c c d d e x b y c z c m x h b i b 我将创建一个字典来像这样保存这些数据 { b:[a,x,h,i] , c:[b,y,z], d:[c], e:[d], x:[m] } 从这本词典中,我希

我的csv文件的格式如下

Col1        Col2
a           b
b           c
c           d
d           e
x           b
y           c
z           c
m           x
h           b
i           b
我将创建一个字典来像这样保存这些数据

{ b:[a,x,h,i] , c:[b,y,z], d:[c], e:[d], x:[m] } 
从这本词典中,我希望能够建立一个层次结构。例如:当我浏览字典中的“a”时,我应该能够显示

 a -> b -> c -> d -> e
与“y”类似

 y -> c -> d -> e
我可以将其视为树结构,并将其视为深度优先遍历,但我不确定如何使用python中的字典实现这一点。这不是决策树或二叉树等。您可以使用

伪代码:

filedict = {}
for row in file:
  try:
    filedict[row.col2].append(row.col1)
  except:
    filedict[row.col2] = [row.col1]
invdict = dict((v,k) for k, v in filedict.iteritems())
def parse(start):
  if start not in invdict:
    return []
  next = invdict[start]
  return [next] + parse(next)

以下是一个仅使用字典的解决方案:

from itertools import chain

def walk(d, k):
    print k,
    while k in d:
        k = d[k]
        print '->', k,

data = {'b': ['a','x','h','i'], 'c': ['b','y','z'], 'd': ['c'], 'e': ['d'], 'x': ['m']}
hierarchy = dict(chain(*([(c, p) for c in l] for p, l in data.iteritems())))
# {'a':'b', 'c':'d', 'b':'c', 'd':'e', 'i':'b', 'h':'b', 'm':'x', 'y':'c', 'x':'b', 'z':'c'}

walk(hierarchy, 'a') # prints 'a -> b -> c -> d -> e'
walk(hierarchy, 'y') # prints 'y -> c -> d -> e'

您需要对数据进行哪些操作?您需要从一个列到另一个列的跳转序列吗?顺序是多少行?如果要进行的查找是反向的,为什么要以这种方式构建字典?为什么不简单地按照您想要查找的方式构建dicitonary,即使用第一列作为键,第二列作为值?
from itertools import chain

def walk(d, k):
    print k,
    while k in d:
        k = d[k]
        print '->', k,

data = {'b': ['a','x','h','i'], 'c': ['b','y','z'], 'd': ['c'], 'e': ['d'], 'x': ['m']}
hierarchy = dict(chain(*([(c, p) for c in l] for p, l in data.iteritems())))
# {'a':'b', 'c':'d', 'b':'c', 'd':'e', 'i':'b', 'h':'b', 'm':'x', 'y':'c', 'x':'b', 'z':'c'}

walk(hierarchy, 'a') # prints 'a -> b -> c -> d -> e'
walk(hierarchy, 'y') # prints 'y -> c -> d -> e'