python - ansible - 字典列表到列表字典
问题描述
我正在尝试获取以下 dict 链接列表:
family:
- {'name': 'lior', 'kidname': 'kid1'}
- {'name': 'lior', 'kidname': 'kid2'}
- {'name': 'lew', 'kidname': 'kid3'}
- {'name': 'lew', 'kidname': 'kid4'}
并将其变成列表的字典:
{
'lior':['kid1', 'kid2']
'lew':['kid3', 'kid4']
}
我需要它作为set_fact
ansible playbook 中的命令。到目前为止,我能够创建它,但只有一个孩子(最后一个)
- set_fact:
names: "{{ names | default({}) | combine({ item.name: [item.kidname] }) }}"
with_items: "{{ family }}"
基本上我的问题是添加一个空列表并附加到它,就像我为密钥所做的那样。
谢谢你,里奥
解决方案
I edited your initial attempt to append to the list
---
- hosts: localhost
vars:
family:
- {'name': 'lior', 'kidname': 'kid1'}
- {'name': 'lior', 'kidname': 'kid2'}
- {'name': 'lew', 'kidname': 'kid3'}
- {'name': 'lew', 'kidname': 'kid4'}
tasks:
- set_fact:
names: "{{ names | default({}) | combine({ item.name: names[item.name] | default([]) + [item.kidname] }) }}"
with_items: "{{ family }}"
- debug:
var: names
Which outputs
TASK [debug] *******************************************************************
ok: [localhost] => {
"names": {
"lew": [
"kid3",
"kid4"
],
"lior": [
"kid1",
"kid2"
]
}
}
推荐阅读
- reactjs - 在反应中提交时显示用户输入值
- python - 如何在while循环中对列表进行排序
- php - 使用 php 使用 AES-256-CBC 和 PBKDF2 解密在 bash 中加密的文件
- javascript - 用 JS 获取 HTML 来替换页面的一部分
- html - 在我在检查中编辑某些内容之前,样式表不适用?
- vue.js - 值输入中的vue 3问题
- javascript - ReactJs - 我的 POST 请求总是空的
- flutter - 颤振 gen-l10n 与 l10n.yaml
- excel - 如何使用具有二进制约束的求解器插件
- racket - 尝试与 Racket 中的字符串进行模式匹配以将它们附加在一起