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() 函数将字典的值更改为任何默认值。

更新于: 2023-08-18

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告