Форум сайта python.su
Приветствую.
Есть есть два списка словарей следующего плана:
список пользователей и групп у него(инфа из АД)
list_users_group=[{'login': ‘login1’, ‘group’: ‘back’},
{'login': ‘login1’, ‘group’: ‘radius-profile’},
{'login': ‘login1’, ‘group’: ‘dlp_exchange’},
{'login': ‘login1’, ‘group’: ‘list-users’},
{'login': ‘login1’, ‘group’: ‘ВОР’},
{'login': ‘login1’, ‘group’: ‘minerva’},
{'login': ‘login1’, ‘group’: ‘proxy’},
{'login': ‘login2’, ‘group’: ‘gl-min’},
{'login': ‘login2’, ‘group’: ‘hq-mail’},
{'login': ‘login2’, ‘group’: ‘hq-mailbox’},
{'login': ‘login2’, ‘group’: ‘MarsSB’},
{'login': ‘login2’, ‘group’: ‘MarsSBS’},
{'login': ‘login3’, ‘group’: ‘exch-notif’},
{'login': ‘login3’, ‘group’: ‘teams-users’},
{'login': ‘login3’, ‘group’: ‘users’},
{'login': ‘login3’, ‘group’: ‘DATA_MARSSB_UR’}]
и список всех групп АД(укороченная версия) c их описание
list_group=[{'group': ‘MarsSBS’, ‘description’: ‘description1’},
{'group': ‘minerva’, ‘description’: ‘description2’},
{'group': ‘teams-users’, ‘description’: ‘description3’},
{'group': ‘mailbox’, ‘description’: ‘description4’},
{'group': ‘users’, ‘description’: ‘description5’},
{'group': ‘proxy’, ‘description’: ‘description6’},
{'group': ‘test’, ‘description’: ‘description7’}]
Есть задача добавить в список пользователей описание групп только тех которые есть у него из общего списка групп.
Есть вот такое решение
res_user_group_description=[] for i,v in enumerate(list_users_group): for j,k in enumerate(list_group): if v['group']==k['group']: res_user_group_description.append({'login':v['login'], 'group':v['group'], 'description':k['description']}) print(res_user_group_description)
Отредактировано usmesn (Фев. 11, 2025 12:44:22)
Офлайн
> всего записей о пользователях и группах указанного плана более 1 200 000
> всего записе по группам и их описанию около 41 000.
Где и в каком виде эти записи хранятся?
Офлайн
Rodegastпривет, это информация из корпоративного домена, active directory(AD) по активныйм учетным записям, те которые включенные, в компании более 40 000 пользователей.
всего записей о пользователях и группах указанного плана более 1 200 000
> всего записе по группам и их описанию около 41 000.
res_user_group_description=[] for i,v in enumerate(list_users_group): for j,k in enumerate(list_group): if v['group']==k['group']: res_user_group_description.append({'login':v['login'], 'group':v['group'], 'description':k['description']}) print(res_user_group_description)
Отредактировано usmesn (Фев. 11, 2025 19:58:29)
Офлайн
Я бы создал Sqlite базу с 2 таблицами, загрузил бы туда пользователей и группы, а потом просто от туда выбрал бы то что нужно.
Отредактировано Rodegast (Фев. 11, 2025 23:19:32)
Офлайн
usmesnВ питоне есть модуль в стандартной библиотеке для работы с SQLite. В этом модуле можно SQLite-базы строить прямо в оперативной памяти, без сохранения на диск. Так что построй в памяти пару отношений из исходных данных, а потом выполни по ним поиск с помощью SQL-запроса и результат поиска сохрани в словарь вывода. Для SQLite твои данные считаются микроскопическими, поэтому поиск пройдёт быстро.
может есть какие-то идеи как это реализовать c с указанным объемом данных(я ждал около 5 минут и скрипт так и незавершился)
Отредактировано py.user.next (Фев. 11, 2025 22:24:23)
Офлайн
Rodegast, py.user.next , благодарю за идеи, буду реализовывать.
Офлайн