将字典列表转换为多维字典列表

时间:2017-02-17 14:45:49

标签: python dictionary

我一直试图转换以下内容:

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')

抛出错误,因为它尝试映射列表,所有这些都必须具有相同的长度。此外,输出只是一维的,这不是我想要的。

1 个答案:

答案 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的问题。