2
 [['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.

3
  • Will the names be same for a given date? Commented Aug 18, 2015 at 16:22
  • @thefourtheye no they may not be, sorry in this example they are. Commented Aug 18, 2015 at 16:23
  • Do you want groupby(mylist, key=itemgetter(0, 3))? Commented Aug 18, 2015 at 16:31

1 Answer 1

3

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']]
Sign up to request clarification or add additional context in comments.

1 Comment

@Ben, no worries, as far as your second comment goes I agree with DSM it is probably easier to ask a new question, I am not totally sure what output you expect, it would be easier add a sample of input and expected output to make it more obvious.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.