У меня уже есть словарь d
. Я хочу изменить только значения определенного типа. Например, я хочу заменить строки их длинами.
Скучный способ сделать это с помощью цикла for:
for k,v in d.items():
if isinstance(v, str):
d[k] = len(v)
Но разве зацикливание не медленное?
Это можно сделать с пониманием. Я думаю, что это эквивалентно приведенному выше:
d = {k: len(v) if isinstance(v, str) else v for k,v in d.items()}
Я попробовал это с картой, но они не работают (очевидно, потому что я не понимаю кое-что о распаковке кортежей в Python 3):
d = dict(map(lambda k,v: (k, len(v) if isinstance(v, str) else v), d.items()))
d = dict(map(lambda (k,v): (k, len(v) if isinstance(v, str) else v), d.items()))
Кажется, это работает, но становится большим и уродливым:
dict(map(lambda kv: (kv[0], len(kv[1]) if isinstance(kv[1], str) else kv[1]), d.items()))
Похоже, что такого рода операции будут обычным явлением, но я не могу найти конкретных ответов.
Каков правильный, Pythonic и производительный способ сделать это?
dict
понимание правильное, и imho - это питонический способ добиться этого. - person Cory Kramer   schedule 10.03.2018for
может быть быстрее? Или использует меньше памяти? - person Jacktose   schedule 10.03.2018