如何在python中使用多个变量进行映射?
问题描述:
我需要此帮助,如何在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上的每个字典以及每个字典的每个值。
答
您需要在这里使用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_1
和list_2
的行。这些行sub1
和sub2
分别是一个列表和一个字典。
对于每个这样的sub1, sub2
,我们在结果列表中构造一个字典。本词典由词典理解{k:[sub1[v] for v in vs] for k, vs in sub2.items()}
构成。我们遍历sub2
(sub2.items()
)中的键值元组以及每个这样的键值对,我们将关键字k
与基于字典vs
的值再次通过列表理解构造的值相关联。
vs
因此是与字典中的键相关联的列表,我们所要做的就是获得与索引相关联的元素,所以我们执行映射[sub1[v] for v in vs]
。