首页 > 解决方案 > 如果列表有共同的子列表,如何对列表进行分组?

问题描述

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

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]]]]

标签: pythonlistgroup-by

解决方案


我不确定您想要什么,因为您的示例和您的描述在目标方面并不真正匹配,但我认为您希望半径按 (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]}

推荐阅读