Build a Medical Data Validator - Step 13

Tell us what’s happening:

Hello,
I added the “” to make it into a string but it doesn’t seem to make it correctly. What did I do wrong?

Your code so far


# User Editable Region

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',
    }
]"

# User Editable Region

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

    for index, dictionary in enumerate(data):
        if not isinstance(dictionary, dict):
            print(f'Invalid format: expected a dictionary at position {index}.')
            is_invalid = True

    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/143.0.0.0 Safari/537.36

Challenge Information:

Build a Medical Data Validator - Step 13

This is a multil-ine string.

Oh okay thanks! I should have known.

I’m stuck as well. I’ve done “validate(str(medical_records))”, which gives the expected error message, but the page still won’t let me progress.

I see. Literally go back and redefine it as a string…

yes, the medical_records variable needs to have value of a string

correct solution

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
validate(medical_records)

    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
validate(medical_records)

The above code worked

Please create your own topic when you have specific questions about your own challenge code. Only respond to another thread when you want to provide help to the original poster of the other thread or have follow up questions concerning other replies given to the original poster.

The easiest way to create a topic for help with your own solution is to click the Help button image located on each challenge. This will automatically import your code in a readable format and pull in the challenge URL while still allowing you to ask any question about the challenge or your code.

Thank you.