Первым шагом будет извлечение строки запроса и split
ее в отдельные части по символу &
; последний шаг будет к join
деталям вместе с &
.
Предполагая, что дубликаты всегда появляются рядом друг с другом, как в вашем примере ввода, вы можете отфильтровать их, используя itertools.groupby
для сохранения исходного порядка:
import itertools
def remove_duplicate_params(url):
path, _, query_string = url.partition('?')
parts = query_string.split('&')
return path + '?' + '&'.join(k for k, _ in itertools.groupby(parts))
# 'https://account.live.com/consent/Manage?fn=email&uaid=51e2193a466c4846a4317b94931b9086&lc=1033&id=38936&mkt=en-US'
Если дубликаты могут не быть смежными, и вам не нужно сохранять порядок параметров в строке запроса, вы можете использовать set
для удаления дубликатов:
def remove_duplicate_params(url):
path, _, query_string = url.partition('?')
parts = query_string.split('&')
return path + '?' + '&'.join(set(parts))
# 'https://account.live.com/consent/Manage?fn=email&mkt=en-US&lc=1033&id=38936&uaid=51e2193a466c4846a4317b94931b9086'