Python Standard - подсчет уникальных значений и укладка без кучи - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть my_list, который выглядит следующим образом:

[['root', '151.62.163.222'], ['tergul', '151.62.163.222'], ['root', '201.179.14.4'], ['root', '201.179.14.4'], ['admin', '201.179.14.4'], ['admin', '201.179.14.4'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202']]

Теперь я хочу подсчитать количество уникальных IP-адресов и сложить их вместе с их количеством.Результат должен быть в виде списка и выглядеть следующим образом:

[['151.62.163.222', '2'],['201.179.14.4', '4'],['10.0.0.202', '6']

У меня есть код, который делает это с массивами numpy:

  unq, count = np.unique(my_array[:,1], axis=0, return_counts=True)
  failed_per_IP = np.column_stack((unq, count))

Я не могу использовать numpy, так как он не установлен насервер, на котором я его запускаю.Как бы я сделал это, используя стандартные библиотеки Python и только списки?

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Это должно сделать работу:

from collections import Counter

lst = [['root', '151.62.163.222'], 
       ['tergul', '151.62.163.222'],
       ['root', '201.179.14.4'],
       ['root', '201.179.14.4'],
       ['admin', '201.179.14.4'],
       ['admin', '201.179.14.4'],
       ['lemming', '10.0.0.202'],
       ['lemming', '10.0.0.202'],
       ['lemming', '10.0.0.202'],
       ['lemming', '10.0.0.202'],
       ['lemming', '10.0.0.202'],
       ['lemming', '10.0.0.202']]
newLst = [t2 for t1, t2 in lst ]
print(Counter(newLst))
Counter({'10.0.0.202': 6, '201.179.14.4': 4, '151.62.163.222': 2})
0 голосов
/ 20 декабря 2018

Счетчик хорош, но если вы заинтересованы в более глубокой реализации, вы можете использовать словарь и отслеживать счетчики при прохождении IP-адресов.

Это хорошее упражнение, но определенно более чистый подходиспользует счетчик.

0 голосов
/ 20 декабря 2018

Вы можете использовать collection.Counter :

from collections import Counter

data = [['root', '151.62.163.222'], ['tergul', '151.62.163.222'], ['root', '201.179.14.4'], ['root', '201.179.14.4'],
 ['admin', '201.179.14.4'], ['admin', '201.179.14.4'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202'],
 ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202'], ['lemming', '10.0.0.202']]

result = [list(item) for item in Counter(address for _, address in data).items()]

print(result)

Выход

[['201.179.14.4', 4], ['151.62.163.222', 2], ['10.0.0.202', 6]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...