Начиная с этого кадра данных
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'])
}
на два отдельных цикла?
Я задаю вопрос только с двумя уровнями вложенности, но только с двумя вложеннымипетли необходимость вряд ли критична.Мотивы:
- К тому времени, когда есть несколько уровней, код становится трудным для чтения.
- Разработка и тестирование небольших блоков защищает от (настоящих и будущих) ошибок на болеечем внешний уровень.