具有动态变量属性的列表理解

Den*_*nis 0 python list-comprehension

通常,列表推导遵循以下模式:

my_list = [record for record in records_set]
Run Code Online (Sandbox Code Playgroud)

例如,如果记录是字典,则它可以扩展为以下表达式:

my_list = [(record['attribute_a'],record['attribute_b']) for record in records_set]
Run Code Online (Sandbox Code Playgroud)

如果我想让列表理解将我想从记录中提取的属性列表作为参数怎么办?

假设我有一个清单

attributes_list = ['attribute_a','attribute_b','attribute_c']
Run Code Online (Sandbox Code Playgroud)

由于将其应用于列表理解模式,我希望得到以下列表理解:

my_list = [(record['attribute_a'],record['attribute_b'],record['attribute_c']) for record in records_set]
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

jde*_*esa 5

你可以做:

my_list =  [tuple(record[attr] for attr in attributes_list) for record in records_set]
Run Code Online (Sandbox Code Playgroud)


che*_*ner 5

最简单的方法是使用 operator.itemgetter

from operator import itemgetter
values_from = itemgetter(*attributes_list)
my_list = [values_from(record) for record in record_set]
Run Code Online (Sandbox Code Playgroud)

这使得跳过列表理解并使用它变得容易map

my_list = list(map(itemgetter(*attributes_list), record_set))
Run Code Online (Sandbox Code Playgroud)

(像往常一样,list在 Python 3 中需要调用,而不是在 Python 2 中。)