Нумерация элементов

Рейтинг: 2Ответов: 1Опубликовано: 23.06.2023

Подскажите, как сделать нумерацию:

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': 'документы'}]

Ответы

▲ 4Принят

Что-то вы перемудрили с однострочником. Нужен просто один цикл по элементам списка причин. Там где подставляется номер элемента нужно подставлять именно число, а вы подставляете список, из-за этого список вместо числа и получается. Ну и для нумерации элементов удобно использовать функцию 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': 'дробление бизнеса'}]