在列表推导中分离嵌套的for循环

时间:2018-10-04 14:57:22

标签: python list-comprehension

从此数据帧开始

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循环:

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'])
}

分成两个单独的循环?

我要问的问题是只有两个嵌套级别,但是只有两个嵌套循环,这个需求并不是很关键。动机是:

  • 到了几个级别,代码变得难以阅读。
  • 开发和测试较小的块不仅可以防止(现在和将来)错误,而且还可以防止外部错误。

0 个答案:

没有答案