2017-10-07 89 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]

相关问题