如何合并两个数组和按组分组?

时间:2019-02-21 11:07:35

标签: python-3.x

如何合并两个数组和按组分组?

示例:

my_list = [3, 4, 5, 6, 4, 6, 8]

keys = [1, 1, 2, 2, 3, 5, 7]

预期结果:

[[1, 3, 4], [2, 5, 6], [3, 4], [5, 6], [7, 8]]

2 个答案:

答案 0 :(得分:0)

我认为您必须使用set()自己编写它才能删除重复项,因此我制作了一个名为merge_group的函数

my_list = [3, 4, 5, 6, 4, 6, 8]
keys = [1, 1, 2, 2, 3, 5, 7]

def merge_group(input_list : list, input_key : list):
    result = []
    i = 0
    while i < len(my_list):
        result.append([my_list[i], keys[i]])
        i += 1
    j = 0
    while j < len(result):
        if j+1 < len(result):    
            check_sum = result[j] + result[j+1]
            check_sum_set = list(set(check_sum))
            if len(check_sum) != len(check_sum_set):
                result[j] = check_sum_set        
        j += 1
    return result        


print(merge_group(my_list, keys))

答案 1 :(得分:0)

如果我理解正确,键列表将映射到值列表。您可以使用zip函数同时遍历两个列表。在这种情况下很方便。还要检查漂亮的defaultdict功能-我们可以使用它来填充列表,而无需显式初始化它。

from collections import defaultdict
result = defaultdict(list)  # a dictionary which by default returns a list
for key, val in zip(keys, my_list):
    result[key].append(val)

result
# {1: [3, 4], 2: [5, 6], 3: [4], 5: [6], 7: [8]}

您可以使用以下方法转到列表(但不确定为什么要这么做)

final = []
for key, val in result.items():
    final.append([key] + val)  # add key back to the list of values

final
# [[1, 3, 4], [2, 5, 6], [3, 4], [5, 6], [7, 8]]