假设
{'C', 'D'}
表示
set(['C', 'D'])
,并且您的 Python 版本支持
dict comprehension
和
set comprehension
,下面是一个不太美观但是可行的解决方案:
>>> tr = [[1, 2, 3], [1, 2, 4], [5, 6, 7]]
>>> {a[0]: {b[1]: {c[2] for c in [y for y in tr if y[1] == b[1]]} for b in [x for x in tr if x[0] == a[0]]} for a in tr}
{1: {2: set([3, 4])}, 5: {6: set([7])}}
关于您的例子:
>>> X = [['A', 'B', 'C'], ['A', 'B', 'D']]
>>> {a[0]: {b[1]: {c[2] for c in [y for y in X if y[1] == b[1]]} for b in [x for x in X if x[0] == a[0]]} for a in X}
{'A': {'B': set(['C', 'D'])}}
但请不要在实际应用中使用它 :)
更新: 这个可以处理任意深度的问题:
>>> def todict(lst, d=0):
... print lst, d
... if d > len(lst):
... return {}
... return {a[d]: todict([x for x in X if x[d] == a[d]], d+1) for a in lst}
...
>>> todict(X)
{'A': {'B': {'C': {}, 'D': {}}}}
{'C','D'}
- FogleBird{'A': {'B': {'C': {}, 'D': {}}}}
- FogleBird