проанализируйте дату из объекта datetime, а затем удалите дубликаты из списка словаря

#python-3.x

Вопрос:

Я довольно новичок в программировании, поэтому, пожалуйста, игнорируйте любые глупые ошибки. У меня есть этот список словаря, в котором есть список устройств, подключенных к ноутбуку. В выводе мне просто нужны уникальные записи за день , допустим, устройство A подключается 3 раза в день, в списке вывода должны быть только те, которые есть. поэтому сначала я должен проанализировать дату из объекта даты и времени в списке ниже и просто поискать дубликаты.

помощь оценена по достоинству !

 devices = [
{'Device Type': 'USB Drive', 'Vendor Id': '05E3', 'Product Id': '0749', 'Serial Number': "'000000001539'", 'Date': '10/19/21 10:32 PM', 'Action': 'Full Access', 'Device': 'CNP150'},
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 12:27 AM', 'Action': 'Full Access', 'Device': 'CNP012'},
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 5:38 AM', 'Action': 'Full Access', 'Device': 'CNP012'},
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 11:59 PM', 'Action': 'Full Access', 'Device': 'CNP012'},
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'748123d6d86dd4173371362201a0d8d250145fbf'", 'Date': '10/17/21 6:59 AM', 'Action': 'Full Access', 'Device': 'CNP011'}]
 

результат должен быть —

 {'Device Type': 'USB Drive', 'Vendor Id': '05E3', 'Product Id': '0749', 'Serial Number': "'000000001539'", 'Date': '10/19/21 10:32 PM', 'Action': 'Full Access', 'Device': 'CNP150'},
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'ABCD'", 'Date': '10/14/21 11:59 PM', 'Action': 'Full Access', 'Device': 'CNP012'},
{'Device Type': 'iOS', 'Vendor Id': '05AC', 'Product Id': '12A8', 'Serial Number': "'748123d6d86dd4173371362201a0d8d250145fbf'", 'Date': '10/17/21 6:59 AM', 'Action': 'Full Access', 'Device': 'CNP011'}]
 

Ответ №1:

Вы можете использовать функцию groupby из модуля itertools для группировки по дате. Сначала создайте функцию, которая извлекает дату из записи списка:

 def get_date(e):
    return e['Date'].split()[0]
 

Отсортируйте список, используя эту функцию в качестве ключа ( groupby требуется, чтобы последовательность, подлежащая группировке, была отсортирована), и сгруппируйте ее с помощью той же функции. Возьмите первый предмет из каждой группы:

 from itertools import groupby
[list(group)[0] for _,group in groupby(sorted(devices, key=get_date), 
                                       key=get_date)]