我有字典
a:
attr1: abc
attr2: fddf
b:
attr1: abc
attr2: djfkdjf
...
我想按“ attr1”分组。我知道我可以做以下事情
{% for grouper in mydict.values()|groupby('attr1') %}
something
{% endfor %}
但这不是我想要的,因为当我使用values()时,我会丢失密钥。
我需要使用iteritems(),但它会返回一个元组列表,该列表不适用于groupby
答案 0 :(得分:2)
我相信dict2items | groupby('value.attr1')
会做您想要的事情,尽管由于缺少items2dict
,您必须手工将答案的“价值”一面重新粘在一起:>
- set_fact:
reassembled: |
{% for grouper in (mydict | dict2items | groupby('value.attr1')) %}
{% set a_key = grouper[0] %}
{% set d = dict() %}
{% for it in grouper[1] %}
{% set _ = d.update({it["key"]: it["value"]}) %}
{% endfor %}
the key = {{ a_key }} and d={{ d }}
{% endfor %}
我将耐心等待techraf指出这样做的更简洁方法,但是由于没有其他人参与进来,所以我认为我会对此采取行动。
答案 1 :(得分:0)
事实证明groupby支持索引。代替values()使用items()
我通过这个实现了
{% for grouper in mydict.items()|groupby('1.attr1') %}
something
{% endfor %}