J'ai une liste de tuples. Chaque Tuple a 5 éléments (correspondant à 5 colonnes de base de données) et je voudrais faire une requête
select attribute1 from mylist where attribute2 = something
par exemple.
personAge = select age from mylist where person_id = 10
Est-il possible d'interroger la liste des tuples d'une manière ou d'une autre?
je vous remercie
Si vous avez tuples nommés vous pouvez le faire:
results = [t.age for t in mylist if t.person_id == 10]
Sinon, utilisez des index:
results = [t[1] for t in mylist if t[0] == 10]
Ou utilisez le déballage du tuple selon la réponse de Nate. Notez que vous n'avez pas besoin de donner un nom significatif à chaque élément que vous déballez. Tu peux faire (person_id, age, _, _, _, _)
pour déballer un tuple de six objets.
Une solution à cela serait une compréhension de la liste, avec une correspondance de modèle à l'intérieur de votre tuple:
>>> mylist = [(25,7),(26,9),(55,10)]
>>> [age for (age,person_id) in mylist if person_id == 10]
[55]
Une autre façon serait d'utiliser map
et filter
:
>>> map( lambda (age,_): age, filter( lambda (_,person_id): person_id == 10, mylist) )
[55]
Oui, vous pouvez utiliser le filtre si vous savez à quelle position du tuple se trouve la colonne souhaitée. Si le cas est que l'id est le premier élément du Tuple, vous pouvez filtrer la liste comme suit:
filter(lambda t: t[0]==10, mylist)
Cela renverra la liste des tuples correspondants. Si vous voulez l'âge, choisissez simplement l'élément que vous voulez. Au lieu de filtrer, vous pouvez également utiliser la compréhension de liste et choisir l'élément au premier coup. Vous pouvez même le déballer tout de suite (s'il n'y a qu'un seul résultat):
[age] = [t[1] for t in mylist if t[0]==10]
Mais je recommanderais fortement d'utiliser dictionnaires ou tuples nommés à cet effet.