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,使用“/”操作符。
我们将这些除以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(),slicing 等等。
这些方法可以在我们需要在代码中引入某些规范时使用,例如定位字典中的特定值或键。 上述讨论的解决方案是可以用来将一个示例字典分割为K个相等部分的基本方法。
结论
在本文的过程中,我们讨论了将字典及其键分割为 K个相等字典 的两种解决方案。第一种解决方案围绕“ 循环概念 ”,我们通过遍历字典并将其添加到一个列表中。第二种解决方案则着重于更优化的方法,将整个循环概念总结为一个单独的字典和列表。