URL query parameters to dict python URL query parameters to dict python python python

URL query parameters to dict python


Use the urllib.parse library:

>>> from urllib import parse>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98">>> parse.urlsplit(url)SplitResult(scheme='http', netloc='www.example.org', path='/default.html', query='ct=32&op=92&item=98', fragment='')>>> parse.parse_qs(parse.urlsplit(url).query){'item': ['98'], 'op': ['92'], 'ct': ['32']}>>> dict(parse.parse_qsl(parse.urlsplit(url).query)){'item': '98', 'op': '92', 'ct': '32'}

The urllib.parse.parse_qs() and urllib.parse.parse_qsl() methods parse out query strings, taking into account that keys can occur more than once and that order may matter.

If you are still on Python 2, urllib.parse was called urlparse.


For Python 3, the values of the dict from parse_qs are in a list, because there might be multiple values. If you just want the first one:

>>> from urllib.parse import urlsplit, parse_qs>>>>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98">>> query = urlsplit(url).query>>> params = parse_qs(query)>>> params{'item': ['98'], 'op': ['92'], 'ct': ['32']}>>> dict(params){'item': ['98'], 'op': ['92'], 'ct': ['32']}>>> {k: v[0] for k, v in params.items()}{'item': '98', 'op': '92', 'ct': '32'}


If you prefer not to use a parser:

url = "http://www.example.org/default.html?ct=32&op=92&item=98"url = url.split("?")[1]dict = {x[0] : x[1] for x in [x.split("=") for x in url[1:].split("&") ]}

So I won't delete what's above but it's definitely not what you should use.

I think I read a few of the answers and they looked a little complicated, incase you're like me, don't use my solution.

Use this:

from urllib import parseparams = dict(parse.parse_qsl(parse.urlsplit(url).query))

and for Python 2.X

import urlparse as parseparams = dict(parse.parse_qsl(parse.urlsplit(url).query))

I know this is the same as the accepted answer, just in a one liner that can be copied.