通过组python组合多维数组

通过组python组合多维数组

 [['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/

10-11 19:15