2017-05-10 35 views
4

我真的希望以前有人問過這個問題,但經過30分鐘的搜索之後,我一直沒有任何運氣。假設我們有多個列表,每個列表具有相同的長度,每個列表包含關於某事的不同類型的數據。我們想把它變成一個以數據類型爲關鍵字的字典列表。創建來自單獨列表的字典列表

輸入:

data = [['tom', 'jim', 'mark'], ['Toronto', 'New York', 'Paris'], [1990,2000,2000]] 
data_types = ['name', 'place', 'year'] 

輸出:

travels = [{'name':'tom', 'place': 'Toronto', 'year':1990}, 
     {'name':'jim', 'place': 'New York', 'year':2000}, 
     {'name':'mark', 'place': 'Paris', 'year':2001}] 

這是很容易與基於索引的迭代做:

travels = [] 
for d_index in range(len(data[0])): 
    travel = {} 
    for dt_index in range(len(data_types)): 
     travel[data_types[dt_index]] = data[dt_index][d_index] 
    travels.append(travel)  

但是,這是2017年!必須有一個更簡潔的方法來做到這一點!我們有地圖,平面圖,縮小,列表解析,numpy,lodash,zip。除了我似乎無法將這些乾淨地組合到這個特定的轉換中。有任何想法嗎?

回答

10

可以調換數據集後使用列表理解zip

>>> [dict(zip(data_types, x)) for x in zip(*data)] 
[{'place': 'Toronto', 'name': 'tom', 'year': 1990}, 
{'place': 'New York', 'name': 'jim', 'year': 2000}, 
{'place': 'Paris', 'name': 'mark', 'year': 2000}] 
+0

整潔!換位對我來說是一個新的!感謝:D – Adverbly