通常,列表理解遵循以下模式:
my_list = [record for record in records_set]
如果record是字典,它可以扩展为例如以下表达式:
my_list = [(record['attribute_a'],record['attribute_b']) for record in records_set]
如果我希望列表理解能够将我想从记录中提取的属性列表作为参数,该怎么办?
假设我有一个清单
attributes_list = ['attribute_a','attribute_b','attribute_c']
由于将其应用于列表理解模式,我希望得到以下列表理解:
my_list = [(record['attribute_a'],record['attribute_b'],record['attribute_c']) for record in records_set]
我该怎么做?
答案 0 :(得分:4)
你可以这样做:
my_list = [tuple(record[attr] for attr in attributes_list) for record in records_set]
答案 1 :(得分:4)
最简单的方法是使用operator.itemgetter
from operator import itemgetter
values_from = itemgetter(*attributes_list)
my_list = [values_from(record) for record in record_set]
这样可以轻松跳过列表理解并改为使用map
。
my_list = list(map(itemgetter(*attributes_list), record_set))
(像往常一样,在Python 3中调用list
是必需的,而不是Python 2。)