假设我有多种功能:
import * as mongoose from 'mongoose';
const ProductSchema = new mongoose.Schema({
}, { strict: false });
ProductSchema.index({ '$**': 'text' });
export default mongoose.model('new_products', ProductSchema);
现在我想获取它们的输出
type = {'a', 'b', ..., 'z'}
f={}
f['a'] = some func_a...
f['b'] = some func_b...
...
f['z'] = some func_z...
我想知道是否有任何一种方法可以使用循环以另一种方式在一行中完成此操作,例如
output = {}
for t in type:
output[t] = f[t](input)
当然,这不起作用。那么会有什么有效的方法吗?
答案 0 :(得分:4)
您想要一个dictionary comprehension。它的工作方式类似于列表推导,但不是提供单个表达式来构成值,而是提供了两个表达式来生成键和值:
output = {t: f[t](input) for t in type}
dict理解会产生一个新的字典对象;不需要output = {}
首行。
我只需要遍历f
的项,因为它已经具有我们需要的密钥:
output = {t: func(input) for t, func in f.items()}
请注意,不要为所有f
函数使用单独的分配,而只需使用一个字典定义即可:
f = {
'a': some_func_a,
'b': some_func_b,
# ...
'z': some_func_z,
}
type
也不是变量的好名字,因为它掩盖了built-in function you may sometimes want to use。您不需要单独创建该集合,因为f
上的迭代将为您提供相同的键,或者您可以使用set(f)
创建一个集合副本,或使用f.keys()
来获取dictionary view object over the keys of f
,其作用与集合类似,但由于其中反映了对f
的更改,因此是“实时的”。