Чтобы отфильтровать список dicts, вы можете использовать фильтр selectattr вместе с тестом equalto :
network.addresses.private_man | selectattr("type", "equalto", "fixed")
Для этого требуется Jinja2 v2 .8 или более поздней версии (независимо от версии Ansible).
. Сильно также имеет тесты match
и search
, которые принимают регулярные выражения:
match
потребует полного совпадения в строке, тогда какsearch
потребует совпадения внутри строки.network.addresses.private_man | selectattr("type", "match", "^fixed$")
Чтобы уменьшить список dicts в список строк, поэтому вы получаете только список полей
addr
, вы можете использовать фильтр карты :... | map(attribute='addr') | list
Или, если вы хотите строку с разделителями-запятыми:
... | map(attribute='addr') | join(',')
В сочетании, это будет выглядеть так.
- debug: msg={{ network.addresses.private_man | selectattr("type", "equalto", "fixed") | map(attribute='addr') | join(',') }}
Пожалуйста, проверьте ниже код, сообщите мне, если он работает.
#!/usr/bin/env python3
# display a welcome message
print("Welcome to the Future Value Calculator")
print()
choice = "y"
while choice.lower() == "y":
# get input from the user
while True:
monthly_investment = float(input("Enter monthly investment: "))
if monthly_investment <= 0 :
print("Entry must be greater than 0 . Please try again.")
continue
else:
break
while True:
yearly_interest_rate = float(input("Enter yearly interest rate: "))
if yearly_interest_rate <= 0 or yearly_interest_rate >= 15:
print("Entry must be greater than 0 and less than or equal to 15. Please try again.")
continue
else:
break
while True:
years = int(input("Enter number of years: "))
if years <= 0 or years >= 50:
print("Entry must be greater than 0 and less than or equal to 50")
continue
else:
break
# convert yearly values to monthly values
monthly_interest_rate = yearly_interest_rate / 12 / 100
months = years * 12
# calculate the future value
future_value = 0
for i in range(1,months+1):
future_value += monthly_investment
monthly_interest_amount = future_value * monthly_interest_rate
future_value += monthly_interest_amount
if i % 12 ==0:
# display the result
print("Year = {0} Future value:\t{1}".format(i//12,str(round(future_value, 2))))
# see if the user wants to continue
choice = input("Continue (y/n)? ")
print()
print("Bye!")