Build a Medical Data Validator - Step 44

Tell us what’s happening:

hi amazing peoplee !
So i am kind of struggling to understand what is really asked here, like what is the purpose really of this step ?
I copied exactly what the assignement asks me to print yet there is an error telling me that I forgot a comma, which i find very odd, also the key and val variable (?) don’t really exist but i dont know what to assign them with ? Can someone please explain so i can understand ?

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

# User Editable Region
        invalid_records = find_invalid_records(**dictionary)

        for key in invalid_records:
            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/149.0.0.0 Safari/537.36 Edg/149.0.0.0

Challenge Information:

Build a Medical Data Validator - Step 44

GitHub Link: freeCodeCamp/curriculum/challenges/english/blocks/workshop-medical-data-validator/68529fb26c581f13e901de3a.md at main · freeCodeCamp/freeCodeCamp · GitHub

Hi @Cladvyr,

The purpose of this is to find and print the invalid records in medical_records, which you passed to your validate(medical_records) function call.

Your loop variable is the key. Notice you are writing this code inside another loop that also has loop variables available for your use, like index. And if you have the key, you can get the value from the dictionary, right?

Please make sure the syntax of your f-string is correct. Remember to use double quotes if single quotes are included inside it.

Happy coding

Thank youuuuuu, I also updated the medical_records and it helped too !