Нумерация элементов
Подскажите, как сделать нумерацию:
filter_options = {
'причины': ['возврат/зачет', 'вычеты', 'документы'],
'последствия': ['документы', 'МНК'],
'Классификация НО действий НП': ['взаимозависимые организации', 'дробление бизнеса']
}
[{"label": f'{list(filter_options.keys())[0]}_{[x for x in range(1, len(filter_options[list(filter_options.keys())[0]])+1)]}', "value": key} for key in filter_options[list(filter_options.keys())[0]]]
По итогу получается так:
[{'label': 'причины_[1, 2, 3]', 'value': 'возврат/зачет'},
{'label': 'причины_[1, 2, 3]', 'value': 'вычеты'},
{'label': 'причины_[1, 2, 3]', 'value': 'документы'}]
А хотелось бы так:
[{'label': 'причины_1', 'value': 'возврат/зачет'},
{'label': 'причины_2', 'value': 'вычеты'},
{'label': 'причины_3', 'value': 'документы'}]
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Что-то вы перемудрили с однострочником. Нужен просто один цикл по элементам списка причин. Там где подставляется номер элемента нужно подставлять именно число, а вы подставляете список, из-за этого список вместо числа и получается. Ну и для нумерации элементов удобно использовать функцию enumerate.
filter_options = {
'причины': ['возврат/зачет', 'вычеты', 'документы'],
'последствия': ['документы', 'МНК'],
'Классификация НО действий НП': ['взаимозависимые организации', 'дробление бизнеса']
}
reasons = [
{"label": f"причины_{i}", "value": reason}
for i, reason in enumerate(filter_options["причины"], 1)
]
print(reasons)
Вывод:
[{'label': 'причины_1', 'value': 'возврат/зачет'}, {'label': 'причины_2', 'value': 'вычеты'}, {'label': 'причины_3', 'value': 'документы'}]
Это только для ключа "причины". Если нужно в список собрать данные по всем ключам, то такой код:
filter_options = {
'причины': ['возврат/зачет', 'вычеты', 'документы'],
'последствия': ['документы', 'МНК'],
'Классификация НО действий НП': ['взаимозависимые организации', 'дробление бизнеса']
}
result = [
{"label": f"{label}_{i}", "value": value}
for label, lst in filter_options.items()
for i, value in enumerate(lst, 1)
]
from pprint import pprint
pprint(result, width=120)
Вывод:
[{'label': 'причины_1', 'value': 'возврат/зачет'},
{'label': 'причины_2', 'value': 'вычеты'},
{'label': 'причины_3', 'value': 'документы'},
{'label': 'последствия_1', 'value': 'документы'},
{'label': 'последствия_2', 'value': 'МНК'},
{'label': 'Классификация НО действий НП_1', 'value': 'взаимозависимые организации'},
{'label': 'Классификация НО действий НП_2', 'value': 'дробление бизнеса'}]