繁体   English   中英

从嵌套字典值(树)创建列表列表

[英]Creating list of lists from nested dictionary values (tree)

我使用层次聚类来创建一棵聚类树。

这导致:

dic = {6: {2: 2, 5: {3: 3, 4: {0: 0, 1: 1}}}}

根据集群列出列表:

[ [[6]],
  [[2], [5]],
  [[2], [3], [4]],
  [[2], [3], [0], [1]] ]

根据值列出列表:

[ [[2, 3, 0, 1]],
  [[2], [3, 0, 1]],
  [[2], [3], [0, 1]],
  [[2], [3], [0], [1]] ]

我想要结束的是“根据值列出列表”。

谢谢

我只是为此花了太多时间:

def list_of_list(d):
    if type(d)!=dict:
        return [[[d]]]
    results=[]
    for k,value in d.items():
        results.append(list_of_list(value))
    L=len(max(results,key=len))
    for i in range(len(results)):
        j=len(results[i]) 
        results[i].extend([results[i][j-1]]*(L-j))
    outputtop=[v  for result in results for v in result[0][0]]
    output=[[outputtop]]
    for l in range(L):
        output.append([ val  for result in results for  val in result[l]])
    return output

flat输入数组
walk递归地遍历树并解包值

最终列表推导生成的数组长度与提取的值的数量相同
每个数组元素是一个数组,其中 x 单个值 arrays 来自 l ( l[i:i+1] ),与 l ( l[x:] ) 中元素的 rest 的数组切片连接

dic = {6: {2: 2, 5: {3: 3, 4: {0: 0, 1: 1}}}}
flat = lambda l: [item for sublist in l for item in sublist]
walk = lambda node: flat([walk(v) if type(v) is dict else [v] for v in node.values()])

l = walk(dic)
print([[l[i:i+1] for i in range(x)]+[l[x:]] for x in range(len(l))])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM