with open("input") as f: sues_raw = [n.strip() for n in f.readlines()] with open("components") as f: components_raw = [n.strip() for n in f.readlines()] COMPONENTS = dict() for component in components_raw: key, amount = component.split(":") amount = int(amount) COMPONENTS[key] = amount print(COMPONENTS) SUES = dict() for sue in sues_raw: name, component_list = sue.split(":", 1) component_list = [x.strip() for x in component_list.split(",")] components = dict() for component in component_list: key, amount = component.split(":") amount = int(amount) components[key] = amount SUES[name] = components def is_match(components): for key, remembered_val in components.items(): measured_val = COMPONENTS[key] if key in ["cats", "trees"]: if not remembered_val > measured_val: return False elif key in ["pomeranians", "goldfish"]: if not remembered_val < measured_val: return False elif remembered_val != measured_val: return False return True for name, components in SUES.items(): if is_match(components): print("Found:", name) print("Finish")