Tell us what’s happening:
I’ve no idea what im doing wrong. I’ve already tried it with invalid data and the message printed matches with the one required or at least that is what I’m watching.
Your code so far
import re
medical_records = [
{
'patient_id': 'P1001',
'age': 34,
'gender': 'Female',
'diagnosis': 'Hypertension',
'medications': ['Lisinopril'],
'last_visit_id': 'V2301',
},
{
'patient_id': 'p1002',
'age': 47,
'gender': 'male',
'diagnosis': 'Type 2 Diabetes',
'medications': ['Metformin', 'Insulin'],
'last_visit_id': 'v2302',
},
{
'patient_id': 'P1003',
'age': 29,
'gender': 'female',
'diagnosis': 'Asthma',
'medications': ['Albuterol'],
'last_visit_id': 'v2303',
},
{
'patient_id': 'p1004',
'age': 56,
'gender': 'Male',
'diagnosis': 'Chronic Back Pain',
'medications': ['Ibuprofen', 'Physical Therapy'],
'last_visit_id': 'V2304',
}
]
def find_invalid_records(
patient_id, age, gender, diagnosis, medications, last_visit_id
):
constraints = {
'patient_id': isinstance(patient_id, str)
and re.fullmatch('p\d+', patient_id, re.IGNORECASE),
'age': isinstance(age, int) and age >= 18,
'gender': isinstance(gender, str) and gender.lower() in ('male', 'female'),
'diagnosis': isinstance(diagnosis, str) or diagnosis is None,
'medications': isinstance(medications, list)
and all([isinstance(i, str) for i in medications]),
'last_visit_id': isinstance(last_visit_id, str)
and re.fullmatch('v\d+', last_visit_id, re.IGNORECASE)
}
return [key for key, value in constraints.items() if not value]
def validate(data):
is_sequence = isinstance(data, (list, tuple))
if not is_sequence:
print('Invalid format: expected a list or tuple.')
return False
is_invalid = False
key_set = set(
['patient_id', 'age', 'gender', 'diagnosis', 'medications', 'last_visit_id']
)
for index, dictionary in enumerate(data):
if not isinstance(dictionary, dict):
print(f'Invalid format: expected a dictionary at position {index}.')
is_invalid = True
continue
if set(dictionary.keys()) != key_set:
print(
f'Invalid format: {dictionary} at position {index} has missing and/or invalid keys.'
)
is_invalid = True
continue
invalid_records = find_invalid_records(**dictionary)
# User Editable Region
for key in invalid_records:
val = dictionary[key]
index = list(dictionary.keys()).index(key)
print(f"Unexpected format '{key}: {val}' at position {index}.")
is_invalid = True
# User Editable Region
if is_invalid:
return False
print('Valid format.')
return True
validate(medical_records)
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36
Challenge Information:
Build a Medical Data Validator - Step 44