我正在嘗試使用default
Jinja2中的過濾器將缺失值替換為默認值。
事實證明,我的資料源有一些 NaN,而不僅僅是缺失值。對于我的用例,我想用默認值替換 NaN。但是default
過濾器只是NaN
通過而沒有替換。
Jinja2 中是否有任何過濾器可以讓我輕松地將 NaN 值替換為其他值?(當然我可以寫一個自定義過濾器,我只是想知道是否有更簡單的解決方案。)
對于背景關系,我是從 Ansible 執行此操作的,它比普通的 Jinja2 有更多可用的過濾器。
MWE
playbook.yaml
---
- hosts: localhost
connection: local
tasks:
- name: generate cloudformation template
template:
src: input.j2
dest: output.txt
vars:
data:
- value: 123
comment: this is an integer
- value: None
comment: This is None
- value: NaN
comment: This is NaN
- comment: this is missing
- value: ''
comment: empty string
input.j2
{% for row in data %}
{{ row['comment'] }}
{{ row['value'] | default('default') }}
{{ row['value'] | default('default', boolean=True) }}
{% endfor %}
運行:
ansible-playbook playbook.yaml
cat output.txt
實際行為
this is an integer
123
123
123
This is None
None
None
default
This is NaN
NaN
default
default
this is missing
default
default
default
empty string
default
default
期望的行為
...
This is NaN
NaN
default
default
...
(最好也有一個替代None
s 的解決方案。我不確定為什么None | default('x', boolean=True)
不這樣做,因為這None
是錯誤的。)
uj5u.com熱心網友回復:
默認過濾器在這里對您沒有幫助。自定義過濾器可能是簡化代碼的好主意。但是,您也可以使用當前過濾器轉換資料。
例如,如果缺少屬性,則先添加默認值
_data_default:
- value: default
_data: "{{ _data_default|product(data)|map('combine')|list }}"
_data:
- comment: this is an integer
value: 123
- comment: This is None
value: None
- comment: This is NaN
value: NaN
- comment: this is missing
value: default
- comment: empty string
value: ''
替換值
_regex: '^NaN|None|null$'
_regex_empty: '^$'
_replace: default
_data_values: "{{ _data|map(attribute='value')|
map('regex_replace', _regex, _replace)|
map('regex_replace', _regex_empty, _replace)|
map('community.general.dict_kv', 'value')|list }}"
_data_values:
- value: '123'
- value: default
- value: default
- value: default
- value: default
并結合串列的專案
data2: "{{ data|zip(_data_values)|map('combine')|list }}"
data2:
- comment: this is an integer
value: '123'
- comment: This is None
value: default
- comment: This is NaN
value: default
- comment: this is missing
value: default
- comment: empty string
value: default
使選項適合您的需要,并根據需要放置變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467058.html
上一篇:轉發參考和引數推導
下一篇:DElem<T,N>派生自BElem<T>和DContainer<DElem<T,N>>派生自BContainer<BElem<T>&