подсчет количества вхождений во вложенном списке для дубликатов - PullRequest
0 голосов
/ 05 июня 2019

У меня есть этот список в python ниже, который представляет собой список вложенных списков, и я хочу подсчитать количество вхождений временной отметки и вывести счетчик для каждой временной отметки.Как мне это сделать в python?

message= [['619833', 'Mon Jun  3 15:49:22 2019'], ['568391', 'Mon Jun  3 15:49:22 2019'], ['578934', 'Sat Jun  1 18:34:12 2019'], ['699425', 'Sat Jun  1 18:34:12 2019'], ['969231', 'Wed May 29 16:18:07 2019']]

Ожидаемые результаты:

['Mon Jun  3 15:49:22 2019', 2 ]
['Sat Jun  1 18:34:12 2019', 2 ]

Где 2 - количество.

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Это отредактированная версия ответа @ ArkistarvhKltzuonstev.

messages = [['619833', 'Mon Jun 3 15:49:22 2019'],['568391', 'Mon Jun 3 15:49:22 2019'],['578934', 'Sat Jun 1 18:34:12 2019'],['699425', 'Sat Jun 1 18:34:12 2019'],['969231', 'Wed May 29 16:18:07 2019']]

# Loop through each list
# Create a list called result which formats the data how you requested
result = [(k, sum(1 for i in messages if k in i)) for k in set(m[1] for m in messages)]
# Prints out that result list
print(result)

Это самая быстрая версия, чтобы получить то, что вам нужно.

Вот более полная «программа» с функцией многократного использования:

# Loop through each list
# Create a list called result which formats the data how you requested
def print_count(arr):
    result = [(k, sum(1 for i in arr if k in i)) for k in set(m[1] for m in arr)]
    print(result)

# Create a main function
def main():
    # Declare a list (like the one OP provided)
    messages = [['619833', 'Mon Jun 3 15:49:22 2019'],['568391', 'Mon Jun 3 15:49:22 2019'],['578934', 'Sat Jun 1 18:34:12 2019'],['699425', 'Sat Jun 1 18:34:12 2019'],['969231', 'Wed May 29 16:18:07 2019']]
    # Call the function
    print_count(messages)

# Call the main function
main()
0 голосов
/ 05 июня 2019

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

from collections import Counter

message = [['619833', 'Mon Jun  3 15:49:22 2019'],
['568391', 'Mon Jun  3 15:49:22 2019'],
['578934', 'Sat Jun  1 18:34:12 2019'],
['699425', 'Sat Jun  1 18:34:12 2019'],
['969231', 'Wed May 29 16:18:07 2019']]

print(Counter([x[1] for x in message]))

Что дает следующий вывод:

Counter({'Mon Jun  3 15:49:22 2019': 2, 'Sat Jun  1 18:34:12 2019': 2, 'Wed May 29 16:18:07 2019': 1})    

Вы можете использовать метод most_common на прилавке, чтобы получить структуру, которую вы упомянули в своем вопросе:

>>> print(c.most_common())
[('Mon Jun  3 15:49:22 2019', 2), ('Sat Jun  1 18:34:12 2019', 2), ('Wed May 29 16:18:07 2019', 1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...