Python技术问题:将列表元素整合为单个嵌套Aggs字典
问题:将列表元素整合为单个嵌套字典结构
给定列表:
b = ["apple", "banana", "cherry"]
需要将列表中所有元素添加到字典中,生成一个单个嵌套字典结构。
原有代码:
b = ["apple", "banana", "cherry"] c = [] def abc(key): a = {"aggs": { f"{key}" : { "filter": { "term": { "tag.name": f"{key}" } }, "aggs": { f"{key}_val": { "stats": { "field": "tag.value" } } } } } } c.append(a) for item in b: abc(item) c
当前输出(列表包含多个独立的aggs字典):
[{'aggs': {'apple': {'filter': {'term': {'tag.name': 'apple'}}, 'aggs': {'apple_val': {'stats': {'field': 'tag.value'}}}}}}, {'aggs': {'banana': {'filter': {'term': {'tag.name': 'banana'}}, 'aggs': {'banana_val': {'stats': {'field': 'tag.value'}}}}}}, {'aggs': {'cherry': {'filter': {'term': {'tag.name': 'cherry'}}, 'aggs': {'cherry_val': {'stats': {'field': 'tag.value'}}}}}}]
预期输出(单个嵌套字典,所有元素在同一个aggs下):
{"aggs": { "apple" : { "filter": { "term": { "tag.name": "apple" } }, "aggs": { "apple_val": { "stats": { "field": "tag.value" } } } }, "banana" : { "filter": { "term": { "tag.name": "banana" } }, "aggs": { "banana_val": { "stats": { "field": "tag.value" } } } }, "cherry" : { "filter": { "term": { "tag.name": "cherry" } }, "aggs": { "cherry_val": { "stats": { "field": "tag.value" } } } } } }
解决方案
核心问题是原有代码每次生成独立的aggs字典并添加到列表中,而我们需要把所有元素的结构整合到同一个aggs字典的子键下。修改后的代码如下:
b = ["apple", "banana", "cherry"] # 初始化最终的嵌套字典,顶层是aggs空字典 result = {"aggs": {}} def build_agg(key): # 生成单个元素对应的子结构 return { "filter": {"term": {"tag.name": key}}, "aggs": {f"{key}_val": {"stats": {"field": "tag.value"}}} } for item in b: # 将每个元素的结构添加到顶层aggs字典中,以item为键 result["aggs"][item] = build_agg(item) print(result)
改动说明
- 初始化结果字典:直接创建顶层为
aggs的字典,替代原有的列表存储方式。 - 重构子结构生成逻辑:函数仅返回单个元素对应的嵌套结构,不再包含顶层的
aggs键,避免重复生成独立字典。 - 循环填充目标字典:遍历列表时,将每个元素的结构作为值,以元素本身为键,直接添加到结果字典的
aggs子字典中。
执行后即可得到预期的单个嵌套字典结构,所有元素都整合在同一个aggs层级下。
内容的提问来源于stack exchange,提问作者Divyank
相关产品推荐
相关产品推荐

