Как использовать методы в генераторах списков?

Например:

a = [{1:'1'},{2:'2'},{3:'3'}]
for i in a:
    i.setdefault('add', 5)

Как записать это генератором? Что-то типа такого нужно:

a = [{1:'1'},{2:'2'},{3:'3'}]
b = [i.setdefault('add', 5) for i in a]
# Результат нужен такой как выше, не три 5 в списке
# Заодно подвопрос, откуда там три 5 берется если я вроде вставляю словарь?

В общем как методы в них использовать и можно ли вообще?


Ответы (3 шт):

Автор решения: Zhihar

не совсем понял вопрос

вам нужен вот такой вариант?

a = [{1:'1'}, {2:'2'}, {3:'3'}]
b = [i | {'add': 5} for i in a]

вывод будет аналогичен тому, что вы привели в самом начале поста

→ Ссылка
Автор решения: ganz
a = [{1:'1'},{2:'2'},{3:'3'}]
for i in a:
    i.setdefault('add', 5)

здесь у тебя ключи 1 и 2 удаляются, затем создаётся новый словарь из последнего элемента списка и добавляется к новому словорю значение по умолчанию то есть если в цикле вывести i то получишь

5
{1: '1', 'add': 5}
5
{2: '2', 'add': 5}
5
{3: '3', 'add': 5}
→ Ссылка
Автор решения: SergFSM

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

a = [{1:'1'}, {2:'2'}, {3:'3'}]
b = [i.setdefault('add', 5) and i for i in a]
print(b)

результат:

[{1: '1', 'add': 5}, {2: '2', 'add': 5}, {3: '3', 'add': 5}]
→ Ссылка