使用动态变量属性列出理解

时间:2018-03-21 15:16:57

标签: python list-comprehension

通常,列表理解遵循以下模式:

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]

我该怎么做?

2 个答案:

答案 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。)