我一直试图转换以下内容:
data = {'title':['doc1','doc2','doc3'], 'name':['test','check'], 'id':['ddi5i'] }
为:
[{'title':'doc1', 'name': 'test', 'id': 'ddi5i'},
{'title':'doc2', 'name': 'test', 'id': 'ddi5i'},
{'title':'doc3', 'name': 'test', 'id': 'ddi5i'},
{'title':'doc1', 'name': 'check', 'id': 'ddi5i'},
{'title':'doc2', 'name': 'check', 'id': 'ddi5i'},
{'title':'doc3', 'name': 'check', 'id': 'ddi5i'}]
我尝试了各种选项(列表推导,大熊猫和自定义代码),但似乎没有任何效果。例如,以下内容:
panda.DataFrame(data).to_dict('list')
抛出错误,因为它尝试映射列表,所有这些都必须具有相同的长度。此外,输出只是一维的,这不是我想要的。
答案 0 :(得分:4)
itertools.product
可能就是您在这里寻找的内容,它可以应用于您的数据值,以便为新的dicts获取适当的值分组。像
list(dict(zip(data, ele)) for ele in product(*data.values()))
<强>演示强>
>>> from itertools import product
>>> list(dict(zip(data, ele)) for ele in product(*data.values()))
[{'id': 'ddi5i', 'name': 'test', 'title': 'doc1'},
{'id': 'ddi5i', 'name': 'test', 'title': 'doc2'},
{'id': 'ddi5i', 'name': 'test', 'title': 'doc3'},
{'id': 'ddi5i', 'name': 'check', 'title': 'doc1'},
{'id': 'ddi5i', 'name': 'check', 'title': 'doc2'},
{'id': 'ddi5i', 'name': 'check', 'title': 'doc3'}]
很明显,一旦看到
,这是如何工作的>>> list(product(*data.values()))
[('test', 'doc1', 'ddi5i'),
('test', 'doc2', 'ddi5i'),
('test', 'doc3', 'ddi5i'),
('check', 'doc1', 'ddi5i'),
('check', 'doc2', 'ddi5i'),
('check', 'doc3', 'ddi5i')]
现在这只是用原始密钥拉回到dict的问题。