Ответ 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())
Я хочу применить функцию ко всем значениям в dict и хранить ее в отдельном dict. Я просто пытаюсь понять, как я могу играть с python и хочу посмотреть, как я могу переписать что-то вроде этого
for i in d:
d2[i] = f(d[i])
к чему-то вроде
d2[i] = f(d[i]) for i in d
Первый способ записи - это, конечно, отлично, но я пытаюсь понять, как можно изменить синтаксис python.
Если вы используете 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())
d2 = dict((k, f(v)) for k,v in d.items())
Словари могут быть вложены в 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)