18041 sujets
Questions générales et questions de débutants
Bonjour,
Je vais supposer que players est en fait entouré de crochets, et qu'il contient une liste d'éléments entre accolades (parce que sinon, je ne vois pas bien ce qu'on pourrait trier). Je suppose aussi que x, y et z sont des chaines de caractères.
Il faut employer la méthode .sort() avec 2 paramètres :
- le paramètre key qui vaudra une fonction qui retourne la valeur de ton "z" (c'est sur cette valeur que se fera le tri du coup)
- le paramètre reverse avec la valeur True pour trier par ordre décroissant
Un code possible :
Amicalement,
Modifié par parsimonhi (01 Feb 2021 - 00:57)
Je vais supposer que players est en fait entouré de crochets, et qu'il contient une liste d'éléments entre accolades (parce que sinon, je ne vois pas bien ce qu'on pourrait trier). Je suppose aussi que x, y et z sont des chaines de caractères.
Il faut employer la méthode .sort() avec 2 paramètres :
- le paramètre key qui vaudra une fonction qui retourne la valeur de ton "z" (c'est sur cette valeur que se fera le tri du coup)
- le paramètre reverse avec la valeur True pour trier par ordre décroissant
Un code possible :
def get_z(e):
n=e.get('name')
return n[2]
players = [
{"name": ["a", "h", "c"]},
{"name": ["g", "b", "i"]},
{"name": ["d", "e", "f"]}
]
players.sort(key=get_z,reverse=True)
print(players)
Amicalement,
Modifié par parsimonhi (01 Feb 2021 - 00:57)
Merci beaucoup de ta réponse, j'ai du effectuée une petite modifications pour que ça marche mais sinon c'est parfait. "name" était qu'une expression pour expliquer, en réalité "name" est différents pour chaque élément de players. Bref je sais pas si ce que j'ai fait est la meilleure façon mais voilà comment j'ai changé ce que tu m'as proposé. Merci beaucoup à toi!
Bonne nuit (:
def get_z(e):
for j in e:
n = e.get(j)
return n[2]
Bonne nuit (:
Et l'eau,
je comprends pas bien la question initiale. Parce que il y a pas plus simple à faire :
@parsimonhi:
pour une écriture plus pythonique :
@vzitoi
sauf erreur de ma part, je ne vois pas l'intérêt de faire une boucle.
Modifié par niuxe (01 Feb 2021 - 03:28)
je comprends pas bien la question initiale. Parce que il y a pas plus simple à faire :
players = {"name": ['x', 'y', 'z']} # x/y/z ==> string ou autre type d'objet ?
players['name'].reverse()
print(players)
@parsimonhi:
pour une écriture plus pythonique :
players = [
{"name": ["a", "h", "c"]},
{"name": ["g", "b", "i"]},
{"name": ["d", "e", "f"]},
]
players.sort(key=lambda e: e['name'][2], reverse=True)
print(players)
# une variante
out = list(sorted(players, key=lambda e: e.get('name')[2], reverse=True))
print(out)
@vzitoi
sauf erreur de ma part, je ne vois pas l'intérêt de faire une boucle.
Modifié par niuxe (01 Feb 2021 - 03:28)
Bonjour
Oui, c'est mieux (mais plus difficile à expliquer).
Si on ne connait pas le nom de la propriété a priori et qu'on sait juste que c'est la 1re, faire une boucle me parait peu propre.
Voici une version qui reprend la proposition de niuxe, mais en tenant compte du fait que le nom de la propriété est inconnue :
Amicalement,
niuxe a écrit :
@parsimonhi:
pour une écriture plus pythonique...
Oui, c'est mieux (mais plus difficile à expliquer).
vzytoi a écrit :
... "name" était qu'une expression pour expliquer, en réalité "name" est différents pour chaque élément de players. Bref je sais pas si ce que j'ai fait est la meilleure façon mais voilà comment j'ai changé ce que tu m'as proposé...
Si on ne connait pas le nom de la propriété a priori et qu'on sait juste que c'est la 1re, faire une boucle me parait peu propre.
Voici une version qui reprend la proposition de niuxe, mais en tenant compte du fait que le nom de la propriété est inconnue :
players = [
{"name1": ["a", "h", "c"]},
{"name2": ["g", "b", "i"]},
{"name3": ["d", "e", "f"]}
]
players.sort(key=lambda e: list(e.values())[0][2], reverse=True)
print(players)
Amicalement,