Как сформировать url в таком виде?

Переформулирую задачу с перемещением элемента в словаре в другом виде.
Есть такой код:
query = urllib.parse.parse_qs(query_string)
a = {
    #тут новые параметры для url
    'mstime': ['on'], 
    'market': ['1'], 
    'mf': ['4'],
    'p': ['8']
}
query.update(a)
#получаем рандомный query, например он получился такой:
# query = {'mstime': ['on'], 'market': ['1'],  'p': ['8'], 'mf': ['4']}
new_query = urllib.parse.urlencode(query,True)
#в итоге new_query получили такое:
# new_query = mstime=on&market=1&p=8&mf=4

Для корректного url нужно, чтобы параметр market в new_query шёл первым.
  • Вопрос задан
  • 2695 просмотров
Пригласить эксперта
Ответы на вопрос 2
@malerix
Посмотрите исходный код функции urlencode:
hg.python.org/cpython/file/3.4/Lib/urllib/parse.py#l735
Вам надо либо передать некий объект, у которого есть метод items(), либо подавать на вход не словарь, а список кортежей:
def sortFunction(items):
    # переставляем элементы в списке items нужным образом
    # ...
    # и возвращаем результат
    return new_items
new_query = urllib.parse.urlencode(sortFunction(query.items()),True)
Ответ написан
Комментировать
@Miren Автор вопроса
Решил задачу проработав с уже сформированной строкой new_query:
s = new_query.split('&')
market = 0
for i,row in enumerate(s):
    if(row.split('=')[0] == 'market'):
        market = i
        break
if market!=0:
    temp = s[0]
    s[0] = s[market]
    s[market] = temp
new_query = '&'.join(s)

Возможно кто-то знает как это сделать до формирования new_query. Будет интересно узнать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы