Вы можете передать ваши условия в виде словаря ключей и значений. Тогда в вашей функции просто l oop над ними, если какое-либо из ваших условий не выполнено, тогда нарушите l oop, так как это логическое AND И c все условия должны быть выполнены. Так что если что-то не получится, просто сломайте и перестаньте проверять остальных.
При условии, что все условия выполнены, l oop будет успешно завершен, а затем введет остальную часть l oop, означая, что мы можем напечатать данные, поскольку мы успешно выполнили все условия.
arr = [
{
"EffectiveDate": "2018-05-01T00:00:00Z",
"IncludedQuantity": 0.0,
"MeterCategory": "VM",
"Unit": "1 GB/Month",
"MeterName": "P4 Disks"
},
{
"EffectiveDate": "2018-03-14T00:00:00Z",
"IncludedQuantity": 0.0,
"MeterCategory": "Storage",
"MeterName": "P4 Disks"
},
{
"EffectiveDate": "2017-04-01T00:00:00Z",
"IncludedQuantity": 0.0,
"MeterCategory": "VM",
"Unit": "1 Hour",
"MeterName": "P4 Disks"
}
]
def get_data(getarr, conditions):
return_data = []
for data in getarr:
for key, value in conditions.items():
if key in data and data[key] != value:
break
else:
return_data.append(data)
return return_data
print(get_data(arr, {"MeterCategory": "VM", "Unit": "1 GB/Month"}))
print(get_data(arr, {"MeterCategory": "VM"}))
print(get_data(arr, {"MeterCategory": "Storage"}))
ВЫХОД
[{'EffectiveDate': '2018-05-01T00:00:00Z', 'IncludedQuantity': 0.0, 'MeterCategory': 'VM', 'Unit': '1 GB/Month', 'MeterName': 'P4 Disks'}]
[{'EffectiveDate': '2018-05-01T00:00:00Z', 'IncludedQuantity': 0.0, 'MeterCategory': 'VM', 'Unit': '1 GB/Month', 'MeterName': 'P4 Disks'}, {'EffectiveDate': '2017-04-01T00:00:00Z', 'IncludedQuantity': 0.0, 'MeterCategory': 'VM', 'Unit': '1 Hour', 'MeterName': 'P4 Disks'}]
[{'EffectiveDate': '2018-03-14T00:00:00Z', 'IncludedQuantity': 0.0, 'MeterCategory': 'Storage', 'MeterName': 'P4 Disks'}]