Как я могу удалить специальные символы в значениях, которые в списке словаря Python

#python #dictionary

Вопрос:

Я пытаюсь удалить все » /api/1/сотрудники/» и /api/1/места/ из словаря python. Каков самый простой способ сделать это? На данный момент мой словарь выглядит так —

 dict1 = {5051: ['/api/1/employees/4027', '5051', '/api/1/seats/19014'], 5052: ['/api/1/employees/4048', '5052', '/api/1/seats/19013'], 5053: ['/api/1/employees/4117', '5053', '/api/1/seats/19012'], 5054: ['/api/1/employees/15027', '5054', '/api/1/seats/9765']}
 

Я ожидаю, что ниже будет указано

 dict1 = {5051: ['4027', '5051', '19014'], 5052: ['4048', '5052', '19013'], 5053: ['4117', '5053', '19012'], 5054: ['15027', '5054', '9765']}
 

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

1. Есть ли вероятность, что в конце может быть»/»?

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

Ответ №1:

Воспользуйся str.rsplit :

 dict1 = {k: [s.rsplit("/", 1)[-1] for s in v] for k, v in dict1.items()}
 

Ответ №2:

Нижеприведенное работает. Идея состоит в том, чтобы попытаться преобразовать запись в int , а если мы потерпим неудачу — разделить запись и вернуть последний элемент

 data = {5051: ['/api/1/employees/4027', '5051', '/api/1/seats/19014'],
         5052: ['/api/1/employees/4048', '5052', '/api/1/seats/19013'],
         5053: ['/api/1/employees/4117', '5053', '/api/1/seats/19012'],
         5054: ['/api/1/employees/15027', '5054', '/api/1/seats/9765']}

def get_int(value):
    try:
        x = int(value)
        return value
    except ValueError:
        return value.split('/')[-1]
data = {k: [get_int(vv) for vv in v] for k,v in data.items()}
print(data)
 

выход

 {5051: ['4027', '5051', '19014'], 5052: ['4048', '5052', '19013'], 5053: ['4117', '5053', '19012'], 5054: ['15027', '5054', '9765']}
 

Ответ №3:

используйте регулярное выражение, как показано ниже

 import re

regex = r"[0-9][0-9] "
dict1 = {5051: ['/api/1/employees/4027', '5051', '/api/1/seats/19014'],
         5052: ['/api/1/employees/4048', '5052', '/api/1/seats/19013'],
         5053: ['/api/1/employees/4117', '5053', '/api/1/seats/19012'],
         5054: ['/api/1/employees/15027', '5054', '/api/1/seats/9765']}

for i in dict1:
    dict1[i] = [re.findall(regex, j)[0] if len(re.findall(regex, j)) >= 1 else j for j in dict1[i]]

print(dict1)
 

Ответ №4:

Вы можете применить следующее регулярное выражение для достижения желаемых результатов

 regex = r"[0-9][0-9] "