2017-10-07 49 views
1

我需要此幫助,如何在python中使用多個變量進行映射?

我有一個列表和一個詞典列表。字典列表的值是指向列表列表中的項目的索引列表。 我需要做的是從另外兩個字典中創建一個新的字典列表。

list_1 = [[a,b,c], [d,e,f], ...] 

list_2 = [{key_11: [0,2] , key_12: [0]}, {key_21: [2,0], key_22: [1]}, ...] 

在list_2的第一字典的值,點只對第一名單ØLIST_1等等...

我需要的是具有相同的字典的新列表鍵,但是list_1 [i]上的項目值由list_2上的字符串值表示。 因此,像這樣:

return [{{key_11: [a,c] , key_12: [a]}, {key_21: [f,d], key_22: [e]}, ...] 

我想是這樣的:

return [{key: some_funct(val) for key, val in x.items()} for x in list_2] 

和some_funct需要字典的值與list_2

返回上LIST_1 [X]正確的物品X

我知道我很接近!但我無法使some_funct正常工作,我認爲這是因爲我試圖映射三件事情,list_1上的每個元素,list_2上的每個字典以及每個字典的每個值。

回答

1

您需要在這裏使用zip來同時遍歷這兩個列表。然後,對於每個這樣的列表,我們使用詞典理解來將列表中的元素映射到其對應物。

像:

[{k:[sub1[v] for v in vs] for k, vs in sub2.items()} 
for sub1, sub2 in zip(list_1, list_2)] 

這將產生 - 與您的樣品輸入:

>>> list_1 = [['a','b','c'], ['d','e','f']] 
>>> list_2 = [{'key_11': [0,2] , 'key_12': [0]}, {'key_21': [2,0], 'key_22': [1]}] 
>>> [{k:[sub1[v] for v in vs] for k, vs in sub2.items()} 
... for sub1, sub2 in zip(list_1, list_2)] 
[{'key_12': ['a'], 'key_11': ['a', 'c']}, {'key_21': ['f', 'd'], 'key_22': ['e']}] 

它是如何工作的?

外部部分是列表理解。我們遍歷zip(list_1, list_2),這樣我們就可以得到list_1list_2的行。這些行sub1sub2分別是一個列表和一個字典。

對於每個這樣的sub1, sub2,我們在結果列表中構造一個字典。本詞典由詞典理解{k:[sub1[v] for v in vs] for k, vs in sub2.items()}構成。我們遍歷sub2sub2.items())中的鍵值元組以及每個這樣的鍵值對,我們將關鍵字k與基於字典vs的值再次通過列表理解構造的值相關聯。

vs因此是與字典中的鍵相關聯的列表,我們所要做的就是獲得與索引相關聯的元素,所以我們執行映射[sub1[v] for v in vs]

相關問題