Множественная группировка с использованием argparser в python

#python #argparse

Вопрос:

Привет, я хочу сгруппировать переменные так, как я передаю в командной строке. Рассмотрим следующий пример.

 shell> python cli.py -a 1 -b 23 -b 3 -a 2 -b 7
 

Таким образом, группировка должна происходить так, как все b до 2-го » a «должны принадлежать первому «a», а последнее » b «принадлежит последнему «a»

Таким образом, конечный результат после вывода синтаксического анализа должен быть

 first a {value:1,b:[23,3]}
Second a {value:2,b:[7]}
 

Я перепробовал несколько способов использования argparse для его создания, но не смог найти логики для этого.

Комментарии:

1. Люди просили вариации на эту тему в других SO, но нет, в них ничего argparse специально для этого нет. Вы можете указать action='append' , но это просто собирает все a как в одном списке, так и b в другом. Обычно между аргументами нет никакого взаимодействия или зависимости. Вы должны определить пользовательские Action классы для создания взаимодействий — или подождать, пока какая-нибудь добрая душа сделает это за вас:). Но это может быть проще обработать sys.argv напрямую.

2. Да, я могу реализовать логику @GustavD с помощью sys.argv. Спасибо!

Ответ №1:

У меня была похожая проблема, и я решил ее, используя два массива для a и b. В python списки великолепны, так как вы можете легко хранить списки списков. Когда анализатор обнаруживает переменную a,

Большой список выглядит так

[[a1]], когда встречаются b1 и b2,

[[a1, b1, b2]], a2 встречается,

[[a1, b1, b2], [a2]] и так далее и тому подобное.

Вам нравится это решение?