Разделение вложенных циклов в списках - PullRequest
0 голосов
/ 04 октября 2018

Начиная с этого кадра данных

import pandas as pd
df2 = pd.DataFrame({'t': ['a', 'a', 'a', 'b', 'b', 'b'],
                    'x': [1.1, 2.2, 3.3, 1.1, 2.2, 3.3],
                    'y': [1.0, 2.0, 3.0, 2.0, 3.0, 4.0]})

можно упростить эти вложенные циклы:

for t, df in df2.groupby('t'):
    print("t:", t)
    for d in df.to_dict(orient='records'):
        print({'x': d['x'], 'y': d['y']})

, разделив внутренний цикл на функцию:

def handle(df):
    for d in df.to_dict(orient='records'):    
        print({'x': d['x'], 'y': d['y']})

for t, df in df2.groupby('t'):
    print("t:", t)
    handle(df)

Как я могу аналогичным образом разделить понимание вложенного списка:

mydict = {
    t: [{'x': d['x'], 'y': d['y']} for d in df.to_dict(orient='records')]
       for t, df in df2.groupby(['t'])
}

на два отдельных цикла?

Я задаю вопрос только с двумя уровнями вложенности, но только с двумя вложеннымипетли необходимость вряд ли критична.Мотивы:

  • К тому времени, когда есть несколько уровней, код становится трудным для чтения.
  • Разработка и тестирование небольших блоков защищает от (настоящих и будущих) ошибок на болеечем внешний уровень.
...