runtime
335 / 500
question 335 Functional & Dynamic Python · medium

A cleaning plan named in settings

A product import is cleaned by steps chosen in a settings file. The starter has the step functions and a STEPS registry. Write clean_products(products, plan): check every name in plan first (unknown → ValueError naming it), then apply the steps in order to the list. Every step returns a new list, so the products you were given must not change.

Functionclean_products(products, plan)
plana list of step names, e.g. ["drop_unnamed", "strip_names", "graded_only"]
STEPSdrop_unnamed, strip_names, tidy_brands, graded_only (in the starter)
Returnsthe cleaned list; an empty plan returns the products as they are (a new list)
Examples
callclean_products([{'code': '20621483', 'product_name': ' Bran Flakes ', 'brands': ['Crownfield', 'Lidl'], 'nutriscore_grade': 'b', 'nutriments': {'sugars_100g': 13.2, 'salt_100g': 0.63}}, {'code': '0000000000000', 'product_name': '', 'brands': [], 'nutriscore_grade': None, 'nutriments': {'sugars_100g': 3, 'salt_100g': 0.1}}], ['drop_unnamed', 'strip_names'])returns[{'code': '20621483', 'product_name': 'Bran Flakes', 'brands': ['Crownfield', 'Lidl'], 'nutriscore_grade': 'b', 'nutriments': {'sugars_100g': 13.2, 'salt_100g': 0.63}}]
callclean_products([{'code': '5010029219494', 'product_name': 'Super smooth porridge', 'brands': ['Weetabix', ' Ready break'], 'nutriscore_grade': 'a', 'nutriments': {'sugars_100g': 1, 'salt_100g': 0.03}}, {'code': '7613032192570', 'product_name': 'NESTLE LION Céréales 480g', 'brands': ['Nestlé', ' Lion'], 'nutriscore_grade': 'd', 'nutriments': {'sugars_100g': 25, 'salt_100g': 0.49}}], ['tidy_brands'])returns[{'code': '5010029219494', 'product_name': 'Super smooth porridge', 'brands': ['Weetabix', 'Ready break'], 'nutriscore_grade': 'a', 'nutriments': {'sugars_100g': 1, 'salt_100g': 0.03}}, {'code': '7613032192570', 'product_name': 'NESTLE LION Céréales 480g', 'brands': ['Nestlé', 'Lion'], 'nutriscore_grade': 'd', 'nutriments': {'sugars_100g': 25, 'salt_100g': 0.49}}]
callclean_products([{'code': '0000000000000', 'product_name': '', 'brands': [], 'nutriscore_grade': None, 'nutriments': {'sugars_100g': 3, 'salt_100g': 0.1}}, {'code': '5059319024479', 'product_name': 'Coco Pops', 'brands': ["Kellogg's"], 'nutriscore_grade': 'c', 'nutriments': {'sugars_100g': 17, 'salt_100g': 0.525}}], ['graded_only'])returns[{'code': '5059319024479', 'product_name': 'Coco Pops', 'brands': ["Kellogg's"], 'nutriscore_grade': 'c', 'nutriments': {'sugars_100g': 17, 'salt_100g': 0.525}}]

Loading your progress…

A cleaning plan named in settings — Python practice · Runtime