Concat阵列的分组线

时间:2014-05-26 17:51:44

标签: python arrays concatenation grouping

我有以下数组:

[
  ["String 0", [1, 2]],
  ["String 1", [1, 3]],
  ["String 2", []],
  ["String 3", [2]],
  ["String 1", [1, 2]],
  ["String 2", [0]]
]

我需要将其转换为具有唯一字符串(第一列)和连接第二列的数组。

以下是输出结果:

[
  ["String 0", [1, 2]],
  ["String 1", [1, 3, 1, 2]],
  ["String 2", [0]],
  ["String 3", [2]]
]

在这种情况下,字符串是唯一的,"String 1"有第二列"1, 3, 1, 2""String 2"有第二列"0"

我知道如何使数组唯一,但不知道如何同时进行分组和连接。

2 个答案:

答案 0 :(得分:1)

就像IanAuld建议的那样,字典可能是解决这个问题的最好方法。

尝试以下

arr_of_arrs = [
    ["String 0", [1, 2]],
    ["String 1", [1, 3]],
    ["String 2", []],
    ["String 3", [2]],
    ["String 1", [1, 2]],
    ["String 2", [0]]
  ]
from collections import defaultdict
arrs = defaultdict(lambda: [])
for arr in arr_of_arrs:
    arrs[arr[0]] += arr[1]

如何将字典转换回数组数组作为练习。

答案 1 :(得分:0)

这将符合您要求的输出:

l = [
    ["String 0", [1, 2]],
    ["String 1", [1, 3]],
    ["String 2", []],
    ["String 3", [2]],
    ["String 1", [1, 2]],
    ["String 2", [0]]
    ]
unique = {x[0] for x in l}
new_arr = [[x,[]] for x in unique]
for k in l:
    for n in new_arr:
        if k[0] == n[0]:
            n[1] += k[1]

In [5]: new_arr                   
Out[5]: 
[['String 3', [2]],
 ['String 2', [0]],
 ['String 1', [1, 3, 1, 2]],
 ['String 0', [1, 2]]]