web-dev-qa-db-fra.com

Recherche d'une somme dans une liste imbriquée à l'aide d'une fonction lambda

J'ai une structure de données similaire à celle-ci

table = [
    ("marley", "5"),
    ("bob", "99"),
    ("another name", "3")
]

Ce que je voudrais faire, pour obtenir la somme de la 2ème colonne (5 + 99 + 3) fonctionnellement comme ceci:

total = sum(table, lambda tup : int(tup[1]))

Ce serait une syntaxe similaire à la fonction python sorted, mais ce n'est pas comme cela que vous utiliseriez la fonction sum de python.

Quelle est la façon pythonique/fonctionnelle de résumer la deuxième colonne?

19
hlin117

Une approche consiste à utiliser un expression de générateur :

total = sum(int(v) for name,v in table)
32
Peter de Rivaz

Si vous souhaitez utiliser lambda, les éléments suivants devraient le résoudre:

total = sum(map(lambda x: int(x[1]), table))
8
FredrikHedman

réduire peut aider

total = reduce(lambda x,y:x+int(y[1]), table,0)
7
rth
sum(map(int,Zip(*table)[-1]))

est une façon de le faire ... il existe cependant de nombreuses options

3
Joran Beasley

Vous pouvez également obtenir les valeurs dans un dictionnaire:

total = sum(map(int, dict(table).values())

Cela peut être un peu obscur.

2
Peter Wood