I need help with step 44 of creating a medical data validator

I have already finished the rest of the code, and it tells me that I need to create a ⁠for⁠ loop that iterates over ⁠invalid_records⁠**, but I don’t know where my error is.**

My code, excluding this step, is as follows:

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)
    

if is_invalid:
    return False
print('Valid format.')
return True

validate(medical_records)

I have already finished the rest of the code, and it tells me that I need to create a ⁠for⁠ loop that iterates over ⁠invalid_records⁠**, but I don’t know where my error is.**

My code, excluding this step, is as follows:

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)
    
    for key in invalid_records:
        print(f"Unexpected format '{key}': {dictionary[key]} at position {index}.")
        is_invalid = True


if is_invalid:
    return False
print('Valid format.')
return True

validate(medical_records)

There are two ways you can format your code to make it easier to read and test:

  1. After you copy/paste your code into the editor, select it by dragging your cursor over it then click the (</>) button in the toolbar to automatically wrap your code in backticks. (You can click on the animated demo image below to enlarge it.)

  1. Manually add three backticks on a new line above your code and on a new line after your code. Note that a backtick is NOT the same as a single quote('). To find the backtick key on your keyboard, see this post.

To see changes to your post as you make them, you can click the (M+) button on the toolbar to bring up the rich text editor:

Welcome to the forum @paulagomezbonacho,

Please check to make sure you are returning the message exactly as asked with special attention to the single quotes.


In the future, if you have a question about a specific challenge as it relates to your written code for that challenge and need some help, click the Help button located on the challenge.

The Help button will create a new topic with all code you have written and include a link to the challenge also. You will still be able to ask any questions in the post before submitting it to the forum.

Thank you.


Happy coding