#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] "