From a7c1936acfb95b875d6dc107661b3e054980d82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 29 Dec 2023 11:29:57 +0100 Subject: [PATCH] merge-csv-lists: refactor --- merge-csv-lists.py | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/merge-csv-lists.py b/merge-csv-lists.py index 90322f3..71473ae 100644 --- a/merge-csv-lists.py +++ b/merge-csv-lists.py @@ -2,60 +2,52 @@ import argparse +def split_and_flat(input_string): + if "\n" in input_string: + _without_newlines = input_string.split("\n") + _without_empty = filter(lambda x: x != "", _without_newlines) + input_string = ",".join(_without_empty) + comma_split = input_string.split(",") + flat_list = [] + for item in comma_split: + dash_split = item.split("-") + flat_list.extend([value.strip().replace("\n", "") for value in dash_split]) + return ",".join(flat_list) + + def unique_combined_list(*inputs): - # Combine lists combined_list = [ item.strip().title() for input_list in inputs for item in input_list.split(",") ] - - # Create an empty list to store the final unique names final_list = [] - - # Check for reversed names for name in combined_list: parts = name.split() - - # If the name has two words, check for its reversed variant if len(parts) == 2: first, last = parts reversed_name = f"{last} {first}" - - # If neither the name nor its reversed variant is in the final list, add the name if name not in final_list and reversed_name not in final_list: final_list.append(name) - # If it's a single-word name, simply add it if it's not in the final list else: if name not in final_list: final_list.append(name) - - # Sort the list sorted_list = sorted(final_list) - - # Convert the list back to a comma-separated string output = ",".join(sorted_list) - return output def main(): - # Create an argument parser parser = argparse.ArgumentParser( description="Combine multiple comma-separated lists into one unique sorted list." ) - - # Add a variable number of input lists parser.add_argument("lists", nargs="+", type=str, help="Comma-separated lists.") - - # Parse the arguments args = parser.parse_args() - - # If only one list is provided, use it twice if len(args.lists) == 1: args.lists.append(args.lists[0]) - # Get the unique combined list - result = unique_combined_list(*args.lists) + # Process each list with split_and_flat if it contains a dash + processed_lists = [split_and_flat(lst) if "-" in lst else lst for lst in args.lists] + result = unique_combined_list(*processed_lists) print(result)