Форум сайта python.su
всем привет.
есть некий словарь следующего плана - пользователи и список их групп, но необходимо оставить только название группы(все что после CN= и до ,) без полного пути к ней.
from re import match users={'user1': ['CN=A,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=B,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=C,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'], 'user2': ['CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'], 'user3': ['CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y'] } new_val=[] for k,v in users.items(): for groups in v: groups=match(r"CN=([A-Za-z\-\_ а-яА-Я0-9]*)",groups).group(1) new_val.append(groups) users.update({k:new_val}) new_val.clear() for i,v in users.items(): print(i,v)
{'user1':['A','B','C'], 'user2':['D','E'],'user3':['D','E'']}
{'user1': [], 'user2': [], 'user3': []}
Отредактировано usmesn (Окт. 23, 2024 18:23:31)
Офлайн
usmesnвроде разобрался с данной проблемой - все дело в филосифии ссылочного типа данных к которому относится список и операцией new_val.clear() происходит очистка дачнного списка, который ссылается как раз на ныжные значения в словаре.Как вариает, содавать каждый раз новый список(новую ссылку но объект) после первого цикла for:
всем привет.есть некий словарь следующего плана - пользователи и список их групп, но необходимо оставить только название группы(все что после CN= и до ,) без полного пути к ней.
for k,v in users.items(): new_val = [] for groups in v: groups=match(r"CN=([A-Za-z\-\_ а-яА-Я0-9]*)",groups).group(1) new_val.append(groups) users.update({k:new_val})
Отредактировано usmesn (Окт. 25, 2024 08:52:24)
Офлайн
usmesn
есть некий словарь следующего плана - пользователи и список их групп, но необходимо оставить только название группы(все что после CN= и до ,) без полного пути к ней.Конечный результат должен быть такй:users = { 'user1': [ 'CN=A,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=B,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=C,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y' ], 'user2': [ 'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y' ], 'user3': [ 'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', 'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y' ] }{'user1': ['A','B','C'], 'user2': ['D','E'], 'user3': ['D','E']}
>>> import re >>> >>> users = { ... 'user1': [ ... 'CN=A,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', ... 'CN=B,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', ... 'CN=C,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y' ... ], ... 'user2': [ ... 'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', ... 'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y' ... ], ... 'user3': [ ... 'CN=D,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y', ... 'CN=E,OU=a,OU=b,OU=b,OU=SCB,DC=x,DC=y' ... ] ... } >>> >>> out = {k: [re.search(r'^CN=([^,]+)', i).group(1) for i in v] ... for k, v in users.items()} >>> >>> out {'user1': ['A', 'B', 'C'], 'user2': ['D', 'E'], 'user3': ['D', 'E']} >>>
Отредактировано py.user.next (Окт. 27, 2024 23:07:29)
Офлайн
py.user.next
благодарю за твой вариант решения данной задачи(я ждал тебя))
Отредактировано usmesn (Окт. 28, 2024 17:36:10)
Офлайн