Python多层字典中子键的批量取值及求和方法问询
多层嵌套字典的取值与求和技巧
针对你给出的嵌套字典,以下是几种简便的取值和求和方法:
一、获取指定子键的所有值
1. 取'White'-'Cats'的所有值
直接通过键层级访问到目标字典,再调用values()方法就能拿到所有值:
# 定位到Cats下的White字典,提取所有值 white_cats_values = dict['Cats']['White'].values() print(list(white_cats_values)) # 输出: [5, 6]
2. 取所有'Dogs'对应的值
Dogs下是两层嵌套,用列表推导式可以简洁收集所有值:
dogs_values = [val for color_dict in dict['Dogs'].values() for val in color_dict.values()] print(dogs_values) # 输出: [9, 1, 2, 3]
如果习惯循环写法也可以:
dogs_values = [] for color_dict in dict['Dogs'].values(): dogs_values.extend(color_dict.values()) print(dogs_values) # 输出: [9, 1, 2, 3]
二、对指定子键的值求和
直接用sum()函数配合上面的取值方式即可:
1. 'White'-'Cats'的值求和
sum_white_cats = sum(dict['Cats']['White'].values()) print(sum_white_cats) # 输出: 11
2. 'Dogs'所有值求和
用生成器表达式配合sum,不用额外存列表,更省内存:
sum_dogs = sum(val for color_dict in dict['Dogs'].values() for val in color_dict.values()) print(sum_dogs) # 输出: 15
三、通用工具函数(适配更深嵌套)
如果你的字典嵌套层级不固定,可以写个通用函数递归收集值,复用性更强:
def get_nested_values(nested_dict, keys): # 先定位到目标层级 current = nested_dict for key in keys: current = current[key] # 递归收集所有值 def collect(d): for v in d.values(): if isinstance(v, dict): yield from collect(v) else: yield v return list(collect(current)) # 示例用法 print(get_nested_values(dict, ['Cats', 'White'])) # [5, 6] print(get_nested_values(dict, ['Dogs'])) # [9, 1, 2, 3] print(sum(get_nested_values(dict, ['Dogs']))) # 15
内容的提问来源于stack exchange,提问作者urgeo
相关产品推荐
相关产品推荐

