Combine multidimensional array by group python
Question: 
     [['test', '172.18.74.146', '13:05:43.834', '2015_08_07'], 
      ['test', '172.18.74.148', '12:27:39.016', '2015_08_07'], 
     ['blah', '172.18.74.149', '11:18:33.846', '2015_08_12'], 
     ['blah', '172.18.74.146', '12:27:38.985', '2015_08_12']]
    

I would like the final result to be grouped by date and the project name

    
    
    [["test", "172.18.74.146, 172.18.74.148", "13:05:43.834, 12:27:39.016" ,
    "2015_08_07"], etc..]
    

The names will not be the same for the given date.

How can I do this? I tried using groupby.

    
    
    for g, data in groupby(sorted(my_list, key=itemgetter(0)), itemgetter(0)):
       print(g)
       for elt in data:
         print(' ', elt)
    

but it didnt give me what I wanted.


Answer: You need to pass two keys to sorted, the name and date, then use `str.join` to
concat the ip's and times

    
    
    from itertools import groupby
    from operator import itemgetter
    
    out = []
    
    for _, v in groupby(sorted(data, key=itemgetter(0, 3)),key=itemgetter(0,3)):
        v = list(v)    
        ips = ", ".join([sub[1] for sub in v])
        tmes = ", ".join([sub[2] for sub in v])
        out.append([v[0][0], ips, tmes, v[0][-1]])
    
    print(out)
    
    ['blah', '172.18.74.149, 172.18.74.146', '11:18:33.846, 12:27:38.985', '2015_08_12'], 
    ['test', '172.18.74.146, 172.18.74.148', '13:05:43.834, 12:27:39.016', '2015_08_07']]
    

Or without sorting using dict to group:

    
    
    d = {}
    
    for nm, ip, tm, dte in data:
        key = nm, dte
        if key in d:
            v = d[key]
            v[1] += ", {}".format(ip)
            v[2] += ", {}".format(dte)
        else:
            d[key] = [nm, ip, tm, dte]
    
    print(list(d.values()))
    

Output:

    
    
    [['test', '172.18.74.146, 172.18.74.148', '13:05:43.834, 2015_08_07', '2015_08_07'], 
    ['blah', '172.18.74.149, 172.18.74.146', '11:18:33.846, 2015_08_12', '2015_08_12']]
    

