Python 程序将 URL 参数转换为字典项
Python 中实现的一种数据结构,通常称为关联数组,称为**字典**。字典由一组键值对组成。每个键值组合对应一个键及其相应的键值。
在本文中,我们将学习一个 Python 程序,用于将 URL 参数转换为字典项。
使用的方法
以下是完成此任务的各种方法 -
使用 urllib.parse.parse_qs() 函数
使用 setdefault() 和 re.findall() 函数
使用 split() 函数
示例
假设我们已经获取了一个包含 URL 参数的**输入字符串**,我们将此查询字符串转换为如下所示的字典项。
输入
'tutorials=9&Point=3&Website=2&is=1&best=Yes'
输出
The parsed URL Params of an input string: {'tutorials': ['9'], 'Point': ['3'], 'Website': ['2'], 'is': ['1'], 'best': ['Yes']}
使用 urllib.parse.parse_qs() 函数
在此方法中,我们将使用以下默认内置函数来完成此任务;
urllib.parse.parse_qs() function:
它进行解析,键从“=”的左侧创建,并且它返回一个值列表,这些值是参数的 RHS 值。要使其工作,请导入外部 urllib.parse()。
算法(步骤)
以下是执行所需任务应遵循的算法/步骤 -。
使用 import 关键字导入 urllib.parse 模块。
创建一个变量来存储**输入字符串**。
打印输入字符串。
通过将输入字符串作为参数传递给它,使用**urllib.parse.parse_qs()** 函数。
此处,上述步骤将给定的 URL 参数(查询字符串)转换为字典项。
打印输入字符串的结果解析的 URL 参数
示例
以下程序使用 urllib.parse.parse_qs() 函数返回给定 URL 参数字符串的字典项 -
# importing urllib.parse module import urllib.parse # input string inputString = 'tutorials=9&Point=3&Website=2&is=1&best=Yes' # printing input string print("Input String:", inputString) # Pass the input string to parse_qs(query string) to convert to dictionary resultParams = urllib.parse.parse_qs(inputString) # printing resultant parsed URLs params of an input string print("The parsed URL Params of an input string: ", resultParams)
输出
Input String: tutorials=9&Point=3&Website=2&is=1&best=Yes The parsed URL Params of an input string: {'tutorials': ['9'], 'Point': ['3'], 'Website': ['2'], 'is': ['1'], 'best': ['Yes']}
使用 setdefault() 和 re.findall() 函数
**re.findall() 函数** - findall() 函数返回字符串中模式的所有不重叠匹配项,作为一个字符串列表。字符串从左到右扫描,并且匹配项按发现的顺序返回。
setdefault() 方法
setdefault() 方法返回具有给定键的项的值。
如果键尚不存在,则使用给定值插入它。
语法
dictionary.setdefault(keyname, value)
算法(步骤)
以下是执行所需任务应遵循的算法/步骤 -。
使用 import 关键字导入**re**(正则表达式) 模块。
使用 re 模块的**findall()** 函数,通过将正则表达式模式、字符串作为参数传递给它,从输入字符串中获取所有参数。
创建一个新的空字典,用于存储输入字符串的结果解析的 URL。
使用**for 循环**遍历上述所有参数字典的键、值。
使用 [] 运算符和 setdefault 函数将字典的值设置为列表。
使用 append() 函数将此值附加到字典中。
打印输入字符串的结果解析的 URL 参数。
示例
以下程序使用 setdefault() 和 re.findall() 函数返回给定 URL 参数字符串的字典项 -
# importing re module import re # input string inputString = 'tutorials=9&Point=3&Website=2&is=1&best=Yes' # printing input string print("Input String:", inputString) # getting all params from input string using regex pattern all_params = re.findall(r'([^=&]+)=([^=&]+)', inputString) # Creating a new dictionary to store the URL Parameters as dictionary items resultantDict = dict() # traversing through the key, values of above all_params dictionary for k, v in all_params: # Set the value of the dictionary as a list using the [] operator and setdefault function # Then append this value to the dictionary resultantDict.setdefault(k, []).append(v) # printing resultant parsed urls params of input string print("The parsed urls params of input string:", resultantDict)
输出
执行后,上述程序将生成以下输出 -
Input String: tutorials=9&Point=3&Website=2&is=1&best=Yes The parsed URLs params of an input string: {'tutorials': ['9'], 'Point': ['3'], 'Website': ['2'], 'is': ['1'], 'best': ['Yes']}
使用 split() 函数
在此方法中,我们将使用 split 方法将 URL 参数转换为字典项。
语法
split():
将字符串拆分为列表。我们可以定义分隔符;默认分隔符是任何空格。
示例
以下程序使用 split() 函数返回给定 URL 参数字符串的字典项 -
# input string inputString = 'tutorials=9&Point=3&Website=2&is=1&best=Yes' # printing input string print("Input String:", inputString) # creating an empty dictionary for storing all params resultantDict = dict() # splitting input string based on & separator splittedList = inputString.split("&") # Traverse in the split list using the for loop for k in splittedList: # Split the list again with "=" separator and store the key and value separately p,q=k.split("=") # Assign the above key with the list value to the result Dictionary resultantDict[p]=[q] # printing resultant parsed URLs params of the input string print("The parsed URLs params of input string:", resultantDict)
输出
执行后,上述程序将生成以下输出 -
Input String: tutorials=9&Point=3&Website=2&is=1&best=Yes The parsed URLs params of an input string: {'tutorials': ['9'], 'Point': ['3'], 'Website': ['2'], 'is': ['1'], 'best': ['Yes']}
结论
在本文中,我们学习了如何使用 3 种不同的方法将 URL 参数转换为字典项。使用 regex.findall() 函数,我们学习了如何使用正则表达式分割给定字符串。我们学习了如何使用 setdefault() 函数将字典的值更改为任何默认值。