Python 提取在字典中包含子字符串的键值对程序

Python 提取在字典中包含子字符串的键值对程序

在Python中,字典是一种以键值对形式存储数据的数据结构。每个键都是唯一的,并与不同的值相关联。字典帮助我们高效地访问和检索数据,使程序员能够构建优化的代码。基于不同的需求,可以从给定的字典中提取特定的 键值对

这种选择性提取项目的方法帮助我们生成一个包含相关信息的字典。在本文中,我们将讨论根据“ 子字符串 ”的引用从字典中提取项目的类似概念。

理解问题

我们将创建一个包含不同键及其相应值的字典,然后传递一个子字符串。我们必须提取包含此子字符串的键值对。让我们通过一个示例来理解这个问题:-

输入输出场景

让我们考虑一个具有以下值的字典 –

Input: dict1 = {"Marks": [36, 45, 68], "Grades":["F", "C+", "B+"], "Remarks": "Satisfactory result", "Day": "Saturday"}
substring = "Sat"

如我们所见,此处传递的子字符串是“ Sat ”。 因此,必须检索包含此子字符串的字典项。 返回以下键值对。

Output: {'Remarks': 'Satisfactory result', 'Day': 'Saturday'}

现在,我们已经理解了问题陈述,让我们讨论一些解决方案。

使用迭代(循环)在单个字典上操作

我们将传递一个名为substring的子字符串和一个字典。将创建一个空字典,用于存储提取的键值对。之后,我们将遍历原始字典,并使用“if”语句建立一个条件,以便通过“in”运算符隔离包含子字符串的值。

示例

以下是一个示例,使用子字符串从字典中提取键值对:

dict1 = {"Marks": [36, 45, 68], "Grades":["F", "C+", "B+"], "Remarks": "Satisfactory result", "Day": "Saturday"}
substring = "Sat"
dict2 = {}

for keys, values in dict1.items():
   if substring in values:
      dict2[keys] = values

print(dict2)

输出

{'Remarks': 'Satisfactory result', 'Day': 'Saturday'}

在使用迭代(循环)操作字典列表

这里我们将使用相同的迭代技术来提取键值对,但不是操作单个字典,而是考虑一个字典列表,并且不仅仅是单个键值对,而是分离合适的字典。这些字典将以列表的形式返回。

示例

以下是一个示例 –

lisDict = [{"Name": "Manish Sinah"}, {"Name": "Raghav Kapoor"}, {"Name": "Raghu Pandey"}, {"Name": "Khushi Agarwal"}]
substring = "Rag"
lis2 = []
key = "Name"

for Dict in lisDict:
   if substring in Dict[key]:
      lis2.append(Dict)

print(lis2)

输出

[{'Name': 'Raghav Kapoor'}, {'Name': 'Raghu Pandey'}]

我们可以看到包含子字符串“ Rag ”的两个字典被返回。

使用列表推导

这是一种优雅且紧凑的技术,用于提取键值对。一行代码将总结多行迭代,并返回相关字典的列表。

示例

以下是一个示例 –

LisDict = [{"Name": "Manish Sinah"}, {"Name": "Raghav Kapoor"}, {"Name": "Raghu Pandey"}, {"Name": "Khushi Agarwal"}]
substring = "Rag"
key = "Name"

lis2 = [Dict for Dict in LisDict if substring in Dict[key]]
print(lis2)

输出

[{'Name': 'Raghav Kapoor'}, {'Name': 'Raghu Pandey'}]

使用Filter()和Lambda函数

在这种方法中,我们将使用“ filter() ”函数来过滤那些包含子字符串的字典。过滤条件是由lambda函数设置的。

lambda函数将检索与传递的“ key ”关联的值,并检查该“ value ”中是否存在子字符串。lambda函数根据遇到的值返回“ True ”或“ False ”,根据这个布尔结果,项目要么包含在内,要么被过滤掉。

示例

以下是一个示例 –

lisDict = [{"Name": "Manish Sinah"}, {"Name": "Raghav Kapoor"}, {"Name": "Raghu Pandey"}, {"Name": "Khushi Agarwal"}]
substring = "Rag"
key = "Name"

Fil_lis = list(filter(lambda item: substring in item[key], lisDict))
print(Fil_lis)

输出

[{'Name': 'Raghav Kapoor'}, {'Name': 'Raghu Pandey'}]

替代解决方案和其他见解

使用“ map() ”函数和lambda函数,可以替代使用子字符串提取键值对的解决方案。 map函数 帮助我们迭代遍历字典,而 lambda函数 检查包含子字符串的值。

类型错误 ”是在处理这些字典时可能遇到的常见错误。确保字典的值是可迭代的,以便正确比较和遍历。

结论

在本文中,我们讨论了字典中提取具有子字符串的键值对的不同解决方案。最初,我们着重解释了问题,然后跳转到解决方案。我们讨论了迭代的概念作为主要解决方案。之后,我们了解了列表推导和filter()函数这些技巧,并使用它们提取键值对。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程