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()函数等技术,并使用它们来提取键值对。