首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以从字典列表中挑选字典

可以从字典列表中挑选字典
EN

Stack Overflow用户
提问于 2020-06-11 06:14:00
回答 2查看 111关注 0票数 0

Variable mule_runtimes有一个字典列表:

代码语言:javascript
复制
- id: N-Newton
  version: 4.3.0
- id: N-Galileo
  version: 3.9.0-hf4
- id: N-Einstein
  version: 3.8.5-hf4

我想要一本id = N-Einstein的字典。

我试过使用这个:

代码语言:javascript
复制
- debug:
    msg: "{{ mule_runtimes | selectattr('id', 'equalto', 'N-Einstein') | to_json }}"

和got错误:在({{ JSON | selectattr('id','equalto',‘N- to_json’)|JSON}})上出现意外的模板类型错误:'generator‘类型的对象不是JSON可序列化的。从列表中挑选字典的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-11 06:28:14

第一个问题是mule_runtimes | selectattr('id', 'equalto', 'N-Einstein')返回一个生成器。把它想象成Python语言中的d for d in mule_runtimes if d['id'] == 'N-Einstein'。在使用to_json过滤器之前,您需要将其转换为可序列化的JSON (如列表)。

第二个问题是,它没有从列表中只选择一个字典。对于多个字典,谓词id == 'N-Einstein'可能为真。如果您知道它将只匹配一个字典,则需要将该列表转换为单个字典。

把所有这些放在一起:

代码语言:javascript
复制
{{ mule_runtimes | selectattr('id', 'equalto', 'N-Einstein') | list | last | to_json }}
票数 1
EN

Stack Overflow用户

发布于 2020-06-11 06:49:56

我建议使用json_query:

代码语言:javascript
复制
- name: dictionaries                                                            
  vars:                                                                         
    mule_runtimes:                                                              
      - id: N-Newton                                                            
        version: 4.3.0                                                          
      - id: N-Galileo                                                           
        version: 3.9.0-hf4                                                      
      - id: N-Einstein                                                          
        version: 3.8.5-hf4                                                      
    json: "{{ mule_runtimes }}"                                                 
    query: "[?id=='{{ want }}'].version"                                        
    want: N-Einstein                                                            
  debug:                                                                        
    msg: "{{ json | json_query(query) }}"

给出输出:

代码语言:javascript
复制
TASK [test : dictionaries] *****************************************************                                                                               
ok: [127.0.0.1] => {                                                            
    "msg": [                                                                    
        "3.8.5-hf4"                                                             
    ]                                                                           
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62313989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档