如果列表具有公共子列表,如何将其分组?

时间:2019-04-14 23:58:23

标签: python list group-by

我有一个包含许多子列表的列表。每个子列表都有30个子子列表。 如果两个子列表包含一个相同的子子列表,该如何合并?

inputdata = [ [[99, 87, 10], [97, 93, 10]], [[97, 93, 10], [212, 271, 10]], [[215,271,10], [500,41,9]]]
outputdata = [[[99, 87, 10], [97, 93, 10], [97, 93, 10], [212, 271, 10]], [[215,271,10], [500,41,9]]] 

如上所示,最后一个子列表尚未在输出数据中进行任何修改,因为其子列表与其他子列表没有相似性

我的数据:

[[[[99, 87, 10], [97, 93, 10]], [[212, 271, 10], [212, 271, 10]], [[224, 394, 10], [223, 392, 9]], [[394, 178, 10], [399, 184, 10]], [[155, 91, 10], [149, 87, 10]], [[297, 107, 10], [292, 106, 10]], [[406, 52, 10], [406, 52, 10]], [[349, 427, 10], [347, 425, 10]], [[149, 118, 10], [141, 121, 10]], [[184, 199, 10], [184, 200, 10]], [[185, 247, 10], [178, 244, 10]], [[62, 232, 10], [63, 230, 9]], [[63, 71, 10], [64, 75, 10]], [[205, 46, 10], [207, 44, 9]], [[381, 74, 10], [383, 71, 10]], [[255, 389, 10], [254, 389, 9]], [[98, 143, 9], [93, 145, 10]], [[99, 373, 10], [100, 369, 9]], [[55, 341, 10], [51, 339, 10]], [[89, 195, 10], [91, 197, 10]], [[305, 182, 10], [302, 181, 10]], [[263, 255, 9], [262, 263, 10]], [[345, 62, 9], [345, 61, 9]], [[226, 235, 9], [221, 238, 10]], [[242, 142, 9], [245, 142, 10]], [[379, 35, 9], [379, 35, 10]], [[391, 265, 9], [392, 259, 9]], [[205, 151, 9], [211, 146, 10]], [[335, 397, 9], [347, 425, 10]], [[122, 211, 9], [127, 212, 9]]], [[[347, 425, 10], [343, 422, 9]], [[64, 75, 10], [69, 80, 10]], [[399, 184, 10], [403, 187, 10]], [[178, 244, 10], [173, 247, 10]], [[292, 106, 10], [289, 106, 9]], [[379, 35, 10], [383, 40, 9]], [[383, 71, 10], [383, 71, 10]], [[184, 200, 10], [184, 200, 10]], [[212, 271, 10], [212, 269, 9]], [[406, 52, 10], [409, 56, 10]], [[302, 181, 10], [296, 178, 10]], [[149, 87, 10], [148, 87, 10]], [[245, 142, 10], [248, 143, 10]], [[221, 238, 10], [217, 242, 9]], [[93, 145, 10], [91, 145, 10]], [[211, 146, 10], [218, 148, 10]], [[51, 339, 10], [51, 337, 10]], [[223, 392, 9], [223, 392, 10]], [[97, 93, 10], [93, 99, 10]], [[345, 61, 9], [339, 59, 10]], [[63, 230, 9], [64, 224, 10]], [[91, 197, 10], [91, 205, 10]], [[141, 121, 10], [140, 122, 10]], [[262, 263, 10], [261, 263, 10]], [[392, 259, 9], [394, 257, 10]], [[100, 369, 9], [103, 363, 9]], [[207, 44, 9], [207, 45, 10]], [[127, 212, 9], [134, 214, 9]], [[254, 389, 9], [254, 382, 10]]]]

1 个答案:

答案 0 :(得分:0)

我不确定您想要的是什么,因为您的示例和描述在目标上并不完全匹配,但是我认为您希望按(x,y)对分组的半径。我建议为此使用字典:

your_list=[ [[99, 87, 10], [97, 93, 10]], [[97, 93, 10], [212, 271, 10]]]
d=dict()
for sub_list in your_list:
  for sub_sub in sub_list:
    if tuple(sub_sub[:2]) in d:
      d[tuple(sub_sub[:2])].append(sub_sub[-1])
    else:
      d[tuple(sub_sub[:2])]=[(sub_sub[-1])]


print(d)
>>>>{(99, 87): [10], (97, 93): [10, 10], (212, 271):[10]}