2017-02-17 101 views
2

我一直在嘗試以下步驟轉換的多維列表:轉換字典名單字典

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

這看起來像http://stackoverflow.com/questions/7778465/converting-flat-python-dictionary-to-list-of-dictionaries – sebas

+0

看看'itertools',看起來像是一個組合問題。 – ospahiu

回答

4

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

,現在它只是一個荏苒回的字典與原來的事鍵。

+0

非常感謝!完美的作品... – patxiworks

+0

@patxiworks歡迎您! – miradulo