按其中一个键的值拆分dict(将其保存为单个数据)

时间:2018-06-05 02:33:23

标签: django python-3.x postgresql

My data and issue are similar as this, but it's not the same

如何按其中一个键的值拆分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  
}

我想通过id将它拆分为一个,保留相应的信息和编号,并将其保存为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的做法? Django方式更好!提前谢谢。

1 个答案:

答案 0 :(得分:0)

你应该使用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]