Разделить диктант по значению одного из ключей (чтобы сохранить его как отдельные данные) - PullRequest
0 голосов
/ 05 июня 2018

Мои данные и проблема похожи на это, но это не одно и то же

Как разделить dict по значению одного из ключей и сохранить его как отдельные данные в PostgreSQL?У меня есть словарь, как показано ниже:

data = {
    "id": [1,2,3,4,5,6,7,8], 
    "info": ["info1"],# one or more than one item, number >= 1       
    "number": [1],# one or more than one item, the numbers are the same as info's  
}

Я хочу разделить его на один по идентификатору, сохранив соответствующую информацию и номер, и сохранить его как отдельные данные в PostgreSQL, как показано ниже:

 {'id': 1, 'info': 'info1', 'number': 1},
 {'id': 2, 'info': 'info1', 'number': 1},
 {'id': 3, 'info': 'info1', 'number': 1},
 {'id': 4, 'info': 'info1', 'number': 1},
 {'id': 5, 'info': 'info1', 'number': 1},
 {'id': 6, 'info': 'info1', 'number': 1},
 {'id': 7, 'info': 'info1', 'number': 1},
 {'id': 8, 'info': 'info1', 'number': 1},

, если "info" данных содержит более двух данных, "info":["info1", "info2"], "number" также должны быть [1, 2].Тогда data1 должен быть таким, как показано ниже:

 {'id': 1, 'info': 'info1', 'number': 1},
 {'id': 1, 'info': 'info2', 'number': 2},
 {'id': 2, 'info': 'info1', 'number': 1},
 {'id': 2, 'info': 'info2', 'number': 2},
 {'id': 3, 'info': 'info1', 'number': 1},
 {'id': 3, 'info': 'info2', 'number': 2},
 {'id': 4, 'info': 'info1', 'number': 1},
 {'id': 4, 'info': 'info2', 'number': 2},
 {'id': 5, 'info': 'info1', 'number': 1},
 {'id': 5, 'info': 'info2', 'number': 2},
 {'id': 6, 'info': 'info1', 'number': 1},
 {'id': 6, 'info': 'info2', 'number': 2},
 {'id': 7, 'info': 'info1', 'number': 1},
 {'id': 7, 'info': 'info2', 'number': 2},
 {'id': 8, 'info': 'info1', 'number': 1},
 {'id': 8, 'info': 'info2', 'number': 2},

Что такое Pythonic способ сделать это?Джанго путь лучше!Заранее спасибо.

1 Ответ

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

вы должны использовать продукт от itertools https://docs.python.org/3/library/itertools.html#itertools.product

id_ = data['id']
info = data['info']
number = data['number']
info_and_number = zip(info, number)
changed_data = product(id_, info_and_number)

dict_data = [
{
    'id': id_, 
    'info': info, 
    'number': number
} for id_, (info, number) in changed_data]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...