Build a Medical Data Validator - Step 44

Tell us what’s happening:

‘you should print Unexpected format ’ : ’ at position .’ - i dont understand the error. for key in invalid_records:
val = dictionary[key]
print(f"Unexpected format ‘{key}:{val}’ at position {index}")
is_invalid = True
what is exactly the problem with this code?

Your code so far


# User Editable Region

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 = {"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:
            val = dictionary[key]
            print(f"Unexpected format '{key}:{val}' at position {index}")
            is_invalid = True
    if is_invalid:
        return False
    print("Valid format.")
    return True

     


# User Editable Region

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: https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/challenges/english/blocks/workshop-medical-data-validator/68529fb26c581f13e901de3a.md

Welcome to the forum @amrithapaulson,

This is the f-string the instructions ask for:
Unexpected format '<key>: <val>' at position <index>.

And here is your f-string:
Unexpected format '{key}:{val}' at position {index}

Do you see the difference in spacing and punctuation?

Happy coding

Thanks for helping me out!