我想了解可以条件函数的“键”或“lambdas”的操作和创建,max()
或者min()
应用于列表、字典或元组。
我的意思的一个例子是:
def pais_mas_bienes(registros, tipo_bien='Cultural'):
''' Calcula el país con mayor número de bienes de un tipo dado
Devuelve una tupla con el número de bienes y el nombre del país
ENTRADA:
- registros: lista de tuplas con información de bienes -> [(id, name, year, category, country)]
- tipo_bien: el tipo de bienes para el que se realizará la operación -> str
SALIDA:
- Tupla con el número de bienes y el nombre del país -> (int, str)
'''
tuplas = list(indexa_por_paises(registros, tipo_bien).items())
filtro = max(tuplas, key = lambda x: len(x[1]))
contador = filtra_por_pais_bienes(registros, filtro[0], tipo_bien)
result = (contador, filtro[0])
return result
使用的辅助函数:
def indexa_por_paises(registros, tipo_bien):
result = {}
for i in registros:
if i[3] == tipo_bien and i[4] in result:
result[i[4]] += [i]
if i[3] == tipo_bien and i[4] not in result:
result[i[4]] = [i]
return result
def filtra_por_pais_bienes(registros, pais, tipo_bien):
result = [i for i in registros if i[3]==tipo_bien and i[4]==pais]
return len(result)
函数
max()
和min()
以及函数sorted()
需要知道如何比较两个值,以确定放置它们的顺序,从而确定最大值或最小值。默认情况下,Python 已经有比较基本类型(整数、字符串、元组等)的方法。对于您自己的类型(类),该类可以合并一个
.__lt__()
被评估的方法来进行比较<
,如果是这样的话该类嵌入了这些方法,sorted()
并将max()
使用min()
它们进行排序。如果你想覆盖 python 的默认规则(或那些内置在类方法中的规则)
.__lt__()
,你可以提供一个调用key
这些函数的参数。该参数是您必须单独编程的另一个函数的名称,或者
lambda
如果该函数非常简单以至于它仅包含返回一个表达式,则为一个。无论是 function 还是 onelambda
,它的操作都是一样的:Python
key
为要排序的列表中的每个元素调用您的函数,并根据key
. 就好像它已将列表中的所有元素转换为其他元素(返回的元素key
),对其他元素进行排序,然后将每个元素替换为其原始值。一个例子(元组列表)
想象你的元素是元组。默认情况下,python 已经知道如何对它们进行排序,其方法是根据元组的第一个元素的值进行排序,如果它们相等,则按第二个等。所以:
但事实证明,我们希望它按第二个元素排序。然后我们需要创建一个函数来接收每个元组并返回第二个元素,例如:
使用此功能,如
key
:在这种情况下,该函数非常简单,在其他情况下,它可以包含内部条件、循环或计算“排序值”所需的任何内容。在像这些简单的情况下,可能不值得定义一个函数并为其发明一个名称,特别是如果您不打算在其他任何地方使用它。您可以改用 lambda 表达式:
此外,对于这种特殊情况,您甚至不需要编写函数,因为这是一种常见的情况,python 已经在其模块中为其提供了函数
operator
。这里的语法可能更令人困惑,因为它
itemgetter(1)
是一个函数,在执行时返回另一个函数,它需要一个列表或元组作为参数,并将返回其索引为 1 的元素。就个人而言,我发现lambda表达式更清晰,但是知道它为您operator
提供函数式编程的可能性是很方便的。另一个例子(字典列表)
为了比较字典,python 没有默认方法,所以在这种情况下,必须给它一个
key
. 最典型的情况是您希望按字典中的特定字段对列表进行排序。该机制类似于元组中看到的机制。例如:或者,如果您愿意:
但是请注意,列表的所有元素都假定为具有相关键的字典。
如果您对如何为特定列表定义函数有特别的疑问
key
,请再次询问有关列表元素是什么样的信息以及您希望对它们进行何种排序的信息。