You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible:合并列表中同属性字典,将差异属性值合并为列表

合并列表中同属性字典的实现方法

核心思路是通过一个临时字典按指定属性(这里是name)分组,遍历原列表时收集相同属性对应的目标字段值,最终转换为目标列表。以下是Python的实现代码:

original_list = [
    {"name": "samename", "content": "content1"},
    {"name": "samename", "content": "content2"},
    {"name": "differentname", "content": "content3"}
]

grouped = {}
for item in original_list:
    name = item["name"]
    content = item["content"]
    if name in grouped:
        # 若已有该name,将content转为列表后追加新值
        if not isinstance(grouped[name]["content"], list):
            grouped[name]["content"] = [grouped[name]["content"]]
        grouped[name]["content"].append(content)
    else:
        # 首次遇到该name,直接存入副本避免修改原数据
        grouped[name] = item.copy()

# 转换为最终结果列表
result = list(grouped.values())
print(result)

代码说明

  • 用grouped字典按name做分组键,存储每个name对应的合并后字典。
  • 遍历原始列表时,若当前name已存在于分组字典中:
    • 先检查content是否为列表,若不是则转换为列表,再追加新的content值。
  • 若当前name未出现过,直接将当前字典的副本存入分组字典(使用copy()防止后续修改影响原数据)。
  • 最后将分组字典的所有值转为列表,得到符合要求的结果。

运行代码后输出结果:

[
    {"name": "samename", "content": ["content1", "content2"]},
    {"name": "differentname", "content": "content3"}
]

可选调整

如果希望所有content字段统一为列表类型(即使只有一个值),可以修改首次存入的逻辑:

else:
    grouped[name] = {"name": name, "content": [content]}

这样differentname对应的content会变成["content3"],可根据实际需求选择。

内容的提问来源于stack exchange,提问作者Marisol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:25:20