Я пытаюсь обернуть API со следующей функцией. API имеет конечные точки, которые выглядят примерно так:Подробнее pythonic способ заменить ключевые слова в строке?
/users/{ids}
/users/{ids}/permissions
Идея заключается в том, что я буду в состоянии передать словарь в мою функцию, которая содержит список ids
и те, кто будет отформатирован как API ожидает:
users = {'ids': [1, 2, 3, 5]}
call_api('/users/{ids}/permissions', users)
Тогда в call_api
, я в настоящее время сделать что-то вроде этого
def call_api(url, data):
for k, value in data.items():
if "{" + key + "}" in url:
url = url.replace("{"+k+"}", ';'.join(str(x) for x in value))
data.pop(k, None)
Это работает, но я не могу себе представить, что if
s Эффективность.
Как я могу улучшить его и заставить его работать как в Python 2.7, так и в Python 3.5?
Мне также сказали, что изменение словаря при итерации плохо, но в моих тестах у меня никогда не было проблемы. Я принимаю значение, потому что позже проверяю, есть ли неожиданные параметры (т.е. что-то осталось в data
). Что я сейчас делаю правильно?
Операция if кажется прекрасной для того, что может быть относительно небольшим количеством ключей. Вы можете попытаться «определить» значение с помощью регулярного выражения, чтобы извлечь все, что находится между {и}, но если ваши «данные» имеют только несколько ключей, не беспокойтесь. И я не вижу причин для изменения значений «данных» вообще. Почему вы выскакиваете? –
Я не показывал полную функцию @AustinHastings, но позже в функции мне нужно увидеть, являются ли эти «неизвестные» ключи - те, которые не были выскочены. У меня есть дополнительная логика для выполнения чего-либо с оставшимися ключами/значениями. – NewGuy
Всего около 10 ключей – NewGuy