Привести список словарей к списку строк

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

Всем привет,

Никак не могу корректно обработать вложенные в списки словари. У меня имеется такой список списков со словарями:

my_list_of_dicts = [[{'': 'A'}, {1: 266}, {5: 684}, {10: 2607}, {25: 1881}, {50: 3097}, {100: 5111}], [{'': 'B'}, {1: 684}, {5: 1881}, {10: 6703}, {25: 7410}, {50: 12825}]]

При помощи list comprehensions привожу к строке:

result = ";".join([str(v) for i in my_list_of_dicts for j in i for _, v in j.items()])
A;266;684;2607;1881;3097;5111;B;684;1881;6703;7410;12825

А нужно, чтобы получилось такое:

should_be = [['A;266;684;;1881;3097;5111'], ['B;684;1881;;7410;12825;21090']]

Т.е. необходимо, чтобы вложенные списки сохранялись, вероятно нужно использовать функцию map, но не хватает смекалки разобраться, как правильно её применить в данной ситуации.

Помогите, пожалуйста.

Ответы

▲ 1Принят
my_list_of_dicts = [[{'': 'A'}, {1: 266}, {5: 684}, {10: 2607}, {25: 1881}, {50: 3097}, {100: 5111}],
                    [{'': 'B'}, {1: 684}, {5: 1881}, {10: 6703}, {25: 7410}, {50: 12825}]]
result = [[';'.join(str(x) for item in lst for x in item.values())] for lst in my_list_of_dicts]
print(result)
[['A;266;684;2607;1881;3097;5111'], ['B;684;1881;6703;7410;12825']]
▲ 1

Если нужны вложенные списки, тогда в list comprehension надо делать вложенные списки, всё просто:

[[';'.join([str(list(d.values())[0]) for d in AB])] for AB in my_list_of_dicts]
Вывод:
[['A;266;684;2607;1881;3097;5111'], ['B;684;1881;6703;7410;12825']]