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()函式等技術,並使用它們來提取鍵值對。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP