LINUX.ORG.RU

однострочник на python

 


2

2

Гм вот такая вот задачка простейшая:

есть некий словарь

test = { "name1" : 1, "name2": 2, "name10" : 10 }

Нужно для какого-то условия ( например value > 5 ) умножить значения value *2. Можно ли это сделать в 1 строчку ?


dict comprehension, но это создаст новый словарь на основе существующего

лучше пройдись обычным циклом

Crocodoom ★★★★★
()
Последнее исправление: Crocodoom (всего исправлений: 2)

Можешь эту строчку даже из пайпа получить при этом. Хотя из аргумента тоже можно.

Конечно, просто пишешь x*2 if x>5 else x.

anonymous
()
Ответ на: комментарий от anonymous

{k:test[k] * 2 if test[k] > 5 else test[k] for k in test}

{k : v*2 if v > 5 else v for k, v in test.items()}

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Если значений на обновление слишком много, то лучше даже

test.update((key, value*2) for key, value in test.items() if value > 5)
aedeph_ ★★
()
Ответ на: комментарий от aedeph_

Забыл про условие. list(map(lambda i: i[1]>5 and test.__setitem__(i[0], i[1]*2), test.items()))

Твой говнокод ничем не лучше. Но тут сама задача написать говнокод же.

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Твой говнокод ничем не лучше.

Это, очевидно, неправда. Обычный продуктовый код.

> list(map(lambda i: i[1]>5 and test.__setitem__(i[0], i[1]*2), test.items()))

Маня, но ты же реально говноед.

Хотя бы

any(i[1] > 5 and test.__setitem__(i[0], i[1]*2) for i in test.items())
aedeph_ ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.