使用一对列表中的一些但不是所有元素创建多个dicts

时间:2018-03-19 22:47:15

标签: python python-3.x dictionary

我想从一对名单中说:

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

能够创建多个字典,从(作为关键字)和b(作为值)中任意选择元素对。我在对此question的答案的评论中找到了以下方法:

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估算器对象。

2 个答案:

答案 0 :(得分:3)

您可以将两个陈述合并为一个:

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

答案 1 :(得分:0)

可能将此转换为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}