подсчет 2D-списка в python

#python

#python

Вопрос:

мой 2D-список так же, как:

 log = [[time1, 'aaa', '123.123.123.123'], [time2, 'def', '123.123.123.123'], [time3, 'aaa', '123.123.123.123'], [time4, 'bbb', '123.123.123.123'], [time5, 'bbb', '123.123.123.123']]
 

что я хочу, так это вывод, приведенный ниже, с помощью цикла for:

 aaa: 2
def: 1
bbb: 2
 

как я могу посчитать конкретный col в 2D-списке по циклу?

Комментарии:

1. Знаете ли вы, что такое счетчик в python? tutorialspoint.com/counters-in-python

Ответ №1:

Это здесь должно дать вам решение

 from collections import Counter

for k, v in Counter([a[1] for a in log]).items():
    print(f"{k}: {v}")
 

Выходной сигнал:

 aaa: 2
def: 1
bbb: 2
 

Ответ №2:

Если вы хотите попробовать с обычным dict :

 log = [[time1, 'aaa', '123.123.123.123'], [time2, 'def', '123.123.123.123'], [time3, 'aaa', '123.123.123.123'], [time4, 'bbb', '123.123.123.123'], [time5, 'bbb', '123.123.123.123']]

#Keep track of the counts in the dictionary
counter = dict()

for item in log:
    key = item[1]
    counter[key] = counter.get(key, 0)   1 #If the key doesn't exist, initialize its count to 0 

print(counter)
 

Это даст вам ожидаемый результат в виде:
введите описание изображения здесь

Ответ №3:

Этот код должен соответствовать вашим требованиям :

 import numpy as np
from collections import Counter
Counter(np.array(log)[:,1])
 

Комментарии:

1. он может показать точный результат, но как я могу добавить больше дополнительного кода во время подсчета? именно по этой причине я прошу решение для цикла.

2. Вы имеете в виду, что вам нужно выполнить определенную обработку во время подсчета? Неужели вы не можете сделать это после подсчета голосов ? Я не вижу, какое лечение нельзя было бы провести после подсчета голосов.

3. как вы можете, есть запись о времени, я хочу проверить временную дельту [0] между этими дублированными столбцами [1]

Ответ №4:

 from collections import Counter

ele = [r[1] for r in log]
ele_counts = Counter(ele)
print(dict(ele_counts))
 

ВЫВОД

 {'aaa': 2, 'def': 1, 'bbb': 2}
 

Комментарии:

1. Счетчик — это диктант. Нет необходимости снова упаковывать это в dict.

Ответ №5:

проверьте этот код

 log = [[time1, 'aaa', '123.123.123.123'], [time2, 'def', '123.123.123.123'], [time3, 'aaa', '123.123.123.123'], [time4, 'bbb', '123.123.123.123'], [time5, 'bbb', '123.123.123.123']]
ans = [0,0,0]
for x in log:
  if x[1] == 'aaa':
    ans[0]  = 1
  elif x[1] == 'def':
    ans[1]  = 1
  else:
    ans[2]  = 1

print(f'aaa: {ans[0]}ndef: {ans[1]}nbbb: {ans[2]}')
 

вы должны определить time1 ~ time5 перед проверкой кода