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'}

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

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

我们将传递一个名为 的子字符串以及一个字典。将创建一个空字典,用于存储提取的键值对。之后,我们将遍历原始字典,并使用“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()函数等技术,并使用它们来提取键值对。

更新于:2023年7月12日

837 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告