[['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']]
我希望将最终结果按日期和项目名称分组
[["test", "172.18.74.146, 172.18.74.148", "13:05:43.834, 12:27:39.016" ,
"2015_08_07"], etc..]
给定日期的名称将不同。
我怎样才能做到这一点?我尝试使用groupby。
for g, data in groupby(sorted(my_list, key=itemgetter(0)), itemgetter(0)):
print(g)
for elt in data:
print(' ', elt)
但这并没有给我我想要的东西。
最佳答案
您需要传递两个键进行排序,即名称和日期,然后使用str.join
连接IP和时间
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']]
或不使用dict进行分组:
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()))
输出:
[['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']]
关于python - 通过组python组合多维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32077660/