Подтвердить что ты не робот

Применение функции к значениям в dict

Я хочу применить функцию ко всем значениям в dict и хранить ее в отдельном dict. Я просто пытаюсь понять, как я могу играть с python и хочу посмотреть, как я могу переписать что-то вроде этого

for i in d:
    d2[i] = f(d[i])

к чему-то вроде

d2[i] = f(d[i]) for i in d

Первый способ записи - это, конечно, отлично, но я пытаюсь понять, как можно изменить синтаксис python.

4b9b3361

Ответ 1

Если вы используете Python 2.7 или 3.x:

d2 = {k: f(v) for k, v in d1.items()}

Что эквивалентно:

d2 = {}
for k, v in d1.items():
    d2[k] = f(v)

В противном случае:

d2 = dict((k, f(v)) for k, v in d1.items())

Ответ 2

d2 = dict((k, f(v)) for k,v in d.items())

Ответ 3

Словари могут быть вложены в Python, и в этом случае решение d2 = {k: f(v) for k, v in d1.items()} не будет работать.

Для вложенных словарей требуется некоторая функция для поперечной передачи всей структуры данных. Например, если значениям разрешено быть самими словарями, можно определить такую ​​функцию, как:

def myfun(d):
  for k, v in d.iteritems():
    if isinstance(v, dict):
      d[k] = myfun(v)
    else:
      d[k] = f(v)
  return d

И затем

d2 = myfun(d)