#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]] и так далее и тому подобное.
Вам нравится это решение?