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方式更好!提前谢谢。
答案 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]