Python implementation of directed acyclic graph(python实现的有向无环图)
关于此实现可以在GitHub上找到开源模块
缘由:项目中用到了dag来表示某个数据分析的结果,然后需要转换成Excel来显示(此话题将在下一篇博客中)
然后又要将Excel内容以原样展示到网页中(此话题将在下下一篇博客中)
python实现此数据结构的时候使用到了另外一种特殊的数据结构有序字典(OrderedDict)
>>> from collections import OrderedDict
>>> x = OrderedDict()
>>> x['a'] = set()
>>> x
OrderedDict([('a', set([]))])
>>> x['b'] = set()
>>> x
OrderedDict([('a', set([])), ('b', set([]))])
>>> x['a'].add('b')
>>> x
OrderedDict([('a', set(['b'])), ('b', set([]))])
>>> x['a'].remove('b')
>>> x
OrderedDict([('a', set([])), ('b', set([]))])
>>> [key for key in x if not x[key]]
['b']
dag/six_subset.py
import operator
import sys
# Useful for very coarse version differentiation.
PY2 = sys.version_info[0] == 2
PY3_AND_UP = sys.version_info[0] >= 3
if PY3_AND_UP:
def iterkeys(d, **kw):
return iter(d.keys(**kw))
def itervalues(d, **kw):
return iter(d.values(**kw))
def iteritems(d, **kw):
return iter(d.items(**kw))
def iterlists(d, **kw):
return iter(d.lists(**kw))
viewkeys = operator.methodcaller("keys")
viewvalues = operator.methodcaller("values")
viewitems = operator.methodcaller("items")
else:
def iterkeys(d, **kw):
return d.iterkeys(**kw)
def itervalues(d, **kw):
return d.itervalues(**kw)