Python程式:將字典及其鍵分成K個相等的字典


字典是Python中用於實現資料結構的一種獨特的陣列形式。字典有一些特性,使其成為Python中非常強大的工具。它以鍵值對的形式儲存資料,每個鍵都是一個唯一的識別符號,用於訪問與其關聯的相應值。

我們可以對這個字典執行多種操作並操作其中儲存的資料。本文將解釋其中一項操作,我們將把字典及其鍵分成**K個相等的字典**。

理解問題

我們必須傳入一個字典,然後將其分成K個相等的字典,其中“K”是原始字典的大小。劃分應以平均分配所有鍵的方式進行。讓我們透過一個例子來理解這一點:

Input: dict1 = {"Score":100, "Age": 40, "Salary": 25000, "cutoff":44}
Output: [{'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}, 
{'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}, 
{'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}, 
{'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}]

這裡與不同鍵關聯的每個值都減少到原始值的1/K倍,並返回K個字典的列表。既然我們已經討論了問題陳述,讓我們討論一些解決方案。

使用迭代

在這種方法中,我們將傳入一個示例字典,然後使用“len()”方法獲取“**K**”值。此方法將返回字典的長度。之後,我們將迭代示例字典並將每個**“鍵值”**除以K,方法是使用“**/**”運算子。

我們將把這些除法後的值儲存在一個空字典中,然後使用**“append()”**方法將所有新建立的字典新增到一個空列表中。

示例

dict1 = {"Score":100 , "Age": 40, "Salary": 25000, "cutoff":44}
print(f"Original dictionary is: {dict1}")
K = len(dict1)
print(f"The value for K is: {K}")

empLis = []
empDict ={}
for keys in dict1:
   empDict[keys] = dict1[keys]/K
   empLis.append(empDict)

print(f"The newly divided dictionary is: {empLis}")

輸出

Original dictionary is: {'Score': 100, 'Age': 40, 'Salary': 25000, 'cutoff': 44}
The value for K is: 4
The newly divided dictionary is: [{'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}, {'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}, {'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}, {'Score': 25.0, 'Age': 10.0, 'Salary': 6250.0, 'cutoff': 11.0}]

使用列表推導和字典推導

這種方法是先前解決方案的最佳化版本。在這裡,我們將使用字典推導和列表推導將迭代總結在一個字典和列表中。傳入示例字典後,我們將建立一個字典,在其中儲存除法後的值(**DivDict**)。

迭代進行,它返回原始字典中除以K的鍵。一個列表(**lisDict**)儲存包含除法後值的K個字典。我們將列表的長度設定為K值。

示例

dict1 = {"Number of sixes":244, "Number of fours": 528, "Strike rate": 164, "Balls faced":864}
print(f"Original dictionary is: {dict1}")
K = len(dict1)
print(f"The value for K is: {K}")

#using dictionary comprehension
DivDict ={key_value:dict1[key_value]/K for key_value in dict1}
#using list comprehension
lisDict = [DivDict for i in range(K)]

print(f"The newly divided dictionary is: {lisDict}")

輸出

Original dictionary is: {'Number of sixes': 244, 'Number of fours': 528, 'Strike rate': 164, 'Balls faced': 864}
The value for K is: 4
The newly divided dictionary is: [{'Number of sixes': 61.0, 'Number of fours': 132.0, 'Strike rate': 41.0, 'Balls faced': 216.0}, {'Number of sixes': 61.0, 'Number of fours': 132.0, 'Strike rate': 41.0, 'Balls faced': 216.0}, {'Number of sixes': 61.0, 'Number of fours': 132.0, 'Strike rate': 41.0, 'Balls faced': 216.0}, {'Number of sixes': 61.0, 'Number of fours': 132.0, 'Strike rate': 41.0, 'Balls faced': 216.0}]

還有其他方法涉及使用以下方法:- **zip()、lambda()、groupby()、切片**等。

當我們必須在程式碼中引入某些規範(例如,定位字典中的特定值或鍵)時,可以使用這些方法。上述解決方案是可以用於將示例字典拆分為K個相等部分的基本方法。

結論

在本文中,我們討論了將字典及其鍵分成**K個相等字典**的兩種解決方案。第一種解決方案圍繞“**迴圈概念**”,我們迭代字典並將其新增到列表中。第二種解決方案側重於更最佳化的方案,我們將整個迴圈概念總結在一個字典和列表中。

更新於:2023年7月12日

瀏覽量:324

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.