簡體   English   中英

將字典列表轉換為字典的多維列表

[英]Convert dictionary lists to multi-dimensional list of dictionaries

我一直在嘗試轉換以下內容:

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

拋出錯誤是因為,由於它嘗試映射列表,因此所有列表必須具有相同的長度。 此外,輸出將只是一維的,這不是我想要的。

itertools.product可能就是您在這里尋找的東西,可以將其應用於數據值以獲取適用於新字典的適當值分組。 就像是

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

現在只需要將原始鍵壓縮回字典即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM