Как использовать методы в генераторах списков?
Например:
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}]