Как обрабатывать 10000 и более данных Python dict? - PullRequest
0 голосов
/ 05 июня 2018

Привет всем, у меня есть проблема с обработкой большего количества данных на python, выполнение которого занимает слишком много времени.

- это любой другой способ быстрой обработки данных.

Пример данных Dict (Еще 10000 с указанием 5 из них здесь)

data=[
{
"id": "30421",
"age": "35",
"email": "email_7816@gmail.com",
"pref_location": "50",
"preference_id": "2",
"sub_preference_id": "99",
"preference": "a:5:{s:3:\"cul\";a:4: 
{i:0;i:17;i:1;i:43;i:2;i:51;i:3;i:19;}s:3:\"int\";a:3: 
{i:0;i:16;i:1;i:25;i:2;i:100;}s:3:\"edu\";a:2: 
{i:0;i:70;i:1;i:98;}s:3:\"age\";a:1:{i:0;i:25;}s:3:\"job\";a:3: 
{i:0;i:14;i:1;i:24;i:2;i:101;}}"
},
{
"id": "30421",
"age": "35",
"email": "email_7816@gmail.com",
"pref_location": "50",
"preference_id": "2",
"sub_preference_id": "99",
"preference": "a:5:{s:3:\"cul\";a:4: 
{i:0;i:17;i:1;i:43;i:2;i:51;i:3;i:19;}s:3:\"int\";a:3: 
{i:0;i:16;i:1;i:25;i:2;i:100;}s:3:\"edu\";a:2: 
{i:0;i:70;i:1;i:98;}s:3:\"age\";a:1:{i:0;i:25;}s:3:\"job\";a:3: 
{i:0;i:14;i:1;i:24;i:2;i:101;}}"
},
{
"id": "30421",
"age": "35",
"email": "email_7816@gmail.com",
"pref_location": "50",
"preference_id": "2",
"sub_preference_id": "99",
"preference": "a:5:{s:3:\"cul\";a:4: 
{i:0;i:17;i:1;i:43;i:2;i:51;i:3;i:19;}s:3:\"int\";a:3: 
{i:0;i:16;i:1;i:25;i:2;i:100;}s:3:\"edu\";a:2: 
{i:0;i:70;i:1;i:98;}s:3:\"age\";a:1:{i:0;i:25;}s:3:\"job\";a:3: 
{i:0;i:14;i:1;i:24;i:2;i:101;}}"
},
{
"id": "30421",
"age": "35",
"email": "email_7816@gmail.com",
"pref_location": "50",
"preference_id": "2",
"sub_preference_id": "99",
"preference": "a:5:{s:3:\"cul\";a:4: 
{i:0;i:17;i:1;i:43;i:2;i:51;i:3;i:19;}s:3:\"int\";a:3: 
{i:0;i:16;i:1;i:25;i:2;i:100;}s:3:\"edu\";a:2: 
{i:0;i:70;i:1;i:98;}s:3:\"age\";a:1:{i:0;i:25;}s:3:\"job\";a:3: 
{i:0;i:14;i:1;i:24;i:2;i:101;}}"
},
{
"id": "30421",
"age": "35",
"email": "email_7816@gmail.com",
"pref_location": "50",
"preference_id": "2",
"sub_preference_id": "99",
"preference": "a:5:{s:3:\"cul\";a:4: 
{i:0;i:17;i:1;i:43;i:2;i:51;i:3;i:19;}s:3:\"int\";a:3: 
{i:0;i:16;i:1;i:25;i:2;i:100;}s:3:\"edu\";a:2: 
{i:0;i:70;i:1;i:98;}s:3:\"age\";a:1:{i:0;i:25;}s:3:\"job\";a:3: 
{i:0;i:14;i:1;i:24;i:2;i:101;}}"
},
{
"id": "30421",
"age": "35",
"email": "email_7816@gmail.com",
"pref_location": "50",
"preference_id": "2",
"sub_preference_id": "99",
"preference": "a:5:{s:3:\"cul\";a:4: 
{i:0;i:17;i:1;i:43;i:2;i:51;i:3;i:19;}s:3:\"int\";a:3: 
{i:0;i:16;i:1;i:25;i:2;i:100;}s:3:\"edu\";a:2: 
{i:0;i:70;i:1;i:98;}s:3:\"age\";a:1:{i:0;i:25;}s:3:\"job\";a:3: 
{i:0;i:14;i:1;i:24;i:2;i:101;}}"
},

Мне нужно получить пользователя по возрасту предпочтительного местоположения и другим ограничениям

пример для предпочтительного местоположения

def group_by_pref_loc(data):
    pre_loc=[]
    grp=[]

    for p in data:
        pre_loc.append(p["pref_location"])
        pre_loc=list(set(pre_loc))

    for p in pre_loc:
        sample=[]
        for q in data:
            if q["pref_location"]==p:
                sample.append(q)       
        grp.append(sample)
    return grp

неТолько для этой функции, мой вопрос заключается в том, как обрабатывать большие объемы данных в определенное время. Предложите мне библиотеку или веб-платформу.

примечание * Я использую Linux с процессором Intel (R) Pentium (R) G2030 @3,00 ГГц

1 Ответ

0 голосов
/ 06 июня 2018

Вам необходимо пройти курс обучения структурам данных и алгоритмам.Я обычно не такой тупой, но твой первый цикл ужасен.Для каждого диктанта в списке data, к которому вы добавляете местоположение к pref_loc, преобразуйте этот список в набор для устранения дубликатов, а затем преобразуйте набор обратно в список.Разве вы не видите очевидных избыточных операций?Просто объявите pre_loc как набор и добавьте к нему.Фактически, вы можете сделать это с помощью генератора, который значительно более эффективен:

pre_loc = set(p["pref_location"] for p in data)

И поскольку набор является итеративным, как и список, нет необходимости приводить его к списку, чтобы использоватьэто в вашем втором цикле.

Есть еще более лаконичные и эффективные способы сделать это.Например, используйте itertools.groupby().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...