Перебор словаря и присвоение значений переменной - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть словарь "d", который имеет 10 ключей с фреймами данных pyspark в качестве значений.

 >> d.keys()
  dict_keys (['Py1', 'Py2', 'Py3', 'Py4', 'Py7', 'Py8', 'Py15', 'Py20', 'Py21', 'Py22']

В настоящее время я беру каждый ключ и его значение, затем присваиваю его переменной следующим образом:

   df1 = d['Py1'] 
   df2 = d['Py2']
   df3 = d['Py3']
  .
  .
  .
  df10 = d['Py22']

Затем я выполняю различные манипуляции с использованием pyspark. Как лучше всего добиться этого без избыточности? вот что я пытался ..

 newname = "df"
 counter = 1
 for key in df_list.keys():
 key = newname + str(counter)
 counter+=1
 print (key)

Но когда я делаю печать (df1), я получаю сообщение об ошибке "имя 'df1' не определено".

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Предположим, у вас есть df в списке с именем dfs. Я бы использовал комбинацию понимания и функции enumerate.

out = {newname + str(i): df for i, df in enumerate(dfs, 1)}

Функция enumerate оборачивает итерацию и возвращает кортеж (index, value). Это очень удобно, когда вам нужно ссылаться как на значение, так и на местоположение каждого элемента в списке. Также обратите внимание на использование распаковки кортежей, чтобы дать имя обоим элементам, возвращаемым enumerate.

0 голосов
/ 24 февраля 2020

Да, вы можете использовать globals(), если у вас есть все df глобально.

newname = "df"
d = {k: globals()[newname + str(counter)] for counter, k in enumerate(d, start = 1)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...