Python 中嵌套字典值的求和
有时我们需要对嵌套字典的值进行求和,因此在这个问题陈述中,我们需要使用 Python 找到嵌套字典值的总和。
理解问题
眼前的问题是找到嵌套字典中存在的数值的总和,并且我们必须使用 Python 实现代码。所以嵌套字典是指字典内部的字典。我们必须找到嵌套的值并将它们加起来作为结果。
所有嵌套字典值的求和
在这种方法中,我们将使用 for 循环添加嵌套字典中存在的所有值。
算法
步骤 1 − 定义名为 summation_values 的函数,并在该函数中,我们将传递名为 the_dictionary 的嵌套字典作为输入。
步骤 2 − 初始化 sum 变量,我们将在其中存储嵌套字典中所有值的总和。
步骤 3 − 将为嵌套字典中的所有键值对启动一个循环。然后将启动条件以验证该值是否为数字,然后将该值添加到 sum 变量中。
步骤 4 − 如果整数在嵌套字典中,则递归调用上面创建的函数并将返回值添加到 sum 中。
步骤 5 − 通过返回 sum 的值来结束算法。
示例
# Function to get the summation of values def summation_values(the_dictionary): sum = 0 for value in the_dictionary.values(): if isinstance(value, int): sum += value elif isinstance(value, dict): sum += summation_values(value) return sum # input nested dictionary nested_dict = { 'apple': 10, 'banana': { 'cucumber': 12, 'pineapple': { 'orange': 23, 'mango': 14 } }, 'guava': 16 } # pass the input dictionary and call the function output = summation_values(nested_dict) # show the output print("The summation of nested dictionary values:", output)
输出
The summation of nested dictionary values: 75
复杂度
summation_values 函数的时间复杂度为 O(N),其中 N 是字典中键值对的数量。造成这种复杂度的原因是函数取决于输入字典的大小。
具有相同键的嵌套字典值的求和
在这种方法中,我们将添加嵌套字典中具有相同键的值。
算法
步骤 1 − 将嵌套字典初始化为 the_nested_dict。
步骤 2 − 然后我们将初始化空字典以存储具有相同键的总和值。
步骤 3 − 然后将为 the_nested_dict 的值启动循环。
步骤 4 − 在外部循环内部,我们将对子字典项启动另一个内部循环。
步骤 5 − 然后在内部循环中,当前项值将添加到 sum_values 字典中相应的键中。
步骤 6 − 使用 print() 函数打印更新后的 sum_values 字典。
步骤 7 − 程序执行完成。
示例
# Initialize the nested dictionary the_nested_dict = { 'apple' : {'red' : 4, 'yellow' : 5, 'green' : 8}, 'guava' : {'red' : 8, 'white' : 10}, 'banana' : {'yellow' : 19, 'green' : 10} } #Initialize the empty dictionary sum_values = dict() for subdict in the_nested_dict.values(): for key, elem in subdict.items(): sum_values[key] = elem + sum_values.get(key, 0) #Show the summation of nested dictionary values with same key print("The summation values : " + str(sum_values))
输出
The summation values : {'red': 12, 'yellow': 24, 'green': 18, 'white': 10}
复杂度
如果 N 是主字典中键值对的数量,而 M 是嵌套字典中键值对的数量,则时间复杂度为 O(NM)。原因是我们正在为每个主字典迭代嵌套字典。
结论
到目前为止,我们已经看到了两种解决此类问题的方法。首先,我们加上了嵌套字典中存在的所有值,其次,我们只加上了相同或相同的键值。