Как создать список с пониманием списка и генераторами - PullRequest
0 голосов
/ 04 мая 2020

Я получаю некоторые данные из активного каталога с библиотекой pyad. Как только я выполню запрос, я хотел бы создать фрейм данных с полученными данными:

import pyad
import pyad.adquery as query

pyad.set_defaults(ldap_server=xxxxxx)
q = query.ADQuery()
q.execute(
    attributes=[attribute1,attribute2,attribute3]
    where_clause=xxx
    base_dn=xxxxx
)

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

parameter1 = []
parameter2 = []
parameter3 = []

for x in q.get_results(): #IT'S A GENERATOR
    parameter1.append(x['attribute1'])
    parameter2.append(x['attribute2'])
    parameter3.append(x['attribute3'])

df = pd.Dataframe({'P1':parameter1, 'P2':parameter2, 'P3':parameter3})

Способ создания фрейма данных не является чистым и элегантным. Есть ли способ улучшить этот код? Если бы это был только один параметр, я бы сделал:

df = pd.Dataframe({'P1': [x['parameter1'] for x in q.get_results()]})

, но q является генератором, поэтому я не могу запустить три списка списков без повторного запуска метода q.execute (. ..)

1 Ответ

2 голосов
/ 04 мая 2020

Уберите генератор с дороги

results = list(q.get_results())

Тогда вы сможете:

df = pd.Dataframe({'P1': [x['parameter1'] for x in results], 'P2': [x['parameter2'] for x in results], ...})
...