使用一对列表中的部分但不是全部元素创建多个字典



我想从一对列表中说:

a = ['str1', 'str2', 'str3', 'str4', 'str5']
b = [var1, var2, var3, var4, var5]

能够创建多个词典,从 A(作为关键字(和 B(作为值(中任意选择元素对。我在对这个问题的答案的评论中发现了以下方法:

full_set = dict(zip(a,b))
subset = {i:full_set[i] for i in a if i not in ['str2', 'str5']}

生成子集字典:

{'str1': var1, 'str3': var3, 'str4': var4}

这工作正常,但我很好奇是否有一种同样短或更短的方法从两个列表中构建子集字典,例如,通过为我想要包含的元素指定列表索引,而无需首先创建一个包含所有元素的完整字典。

对于上下文,我的变量引用了scikit-learn估计器对象。

您可以将这两个语句合并为一个:

avoid = {'str2', 'str5'} # Sets have better lookup time :)
{k:v for k,v in zip(a,b) if k not in avoid}

可能将其转换为 numpy 数组并使用像这样的花哨索引:

import numpy as np
a = np.array(['str1', 'str2', 'str3', 'str4', 'str5'])
b = np.array([1,2,3,4,5])
indices = [0, 1, 4]
d = dict(zip(a[indices],b[indices]))

d 返回:

{'str1': 1, 'str2': 2, 'str5': 5}