【问题标题】:Concat arrays of grouped linesConcat 分组线数组
【发布时间】:2014-05-26 17:51:44
【问题描述】:

我有以下数组:

[
  ["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"

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

【问题讨论】:

  • 您考虑过使用字典吗?
  • 数组最初是如何创建的?我认为这可能是解决问题的地方。
  • 看起来更适合做一个 dict

标签: python arrays concatenation grouping


【解决方案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]

如何将字典转换回您的数组数组留作练习。

【讨论】:

    【解决方案2】:

    这将匹配您所需的输出:

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

    【讨论】:

      猜你喜欢
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      相关资源
      最近更新 更多