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个相等字典**的两种解决方案。第一种解决方案围绕“**循环概念**”,我们迭代字典并将其添加到列表中。第二种解决方案侧重于更优化的方案,我们将整个循环概念总结在一个字典和列表中。