[英]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.