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

启动您的职业生涯

通过完成课程获得认证

开始
广告