345345:player7 435:zo 345:name 23:hello 1231:football
3 Réponses :
IIUC:
['23:hello', '345:name', '435:zo', '1231:football', '345345:player7']
Sortie:
l = ['345345:player7',
'435:zo',
'345:name',
'23:hello',
'1231:football']
sorted(l, key=lambda x: int(x.split(':')[0]))
N'avez-vous pas besoin d'analyser les chiffres dans int lors du tri puisque OP a mentionné trier les nombres ?
eh bien, il semble fonctionner, mais n'effectue pas de tri numérique, juste un tri lexicographique. 1231 devrait apparaître après 435 par exemple.
Bon, ça ne lancera certainement pas d'erreur mais je pense qu'OP voulait la réponse de @ Jean-FrançoisFabre ici.
cependant cela ne fonctionne pas car il doit être généré à partir d'un fichier externe et génère ceci:
La clé de tri doit faire: "diviser une fois, convertir en entier". Ne pas convertir en nombre entier échoue car la comparaison lexicographique est alors utilisée et dans ce cas result: qui ne gère pas le départage où les nombres sont égaux. Une clé de tri légèrement plus complexe serait requise (mais toujours faisable). Dans ce cas, supprimez "10" , pas ce que vous voulez. def sortfunc(x):
number,rest = x.split(':',1)
return int(number),rest
result = sorted(l, key=sortfunc)
['23:hello', '345:name', '435:zo', '1231:football', '345345:player7']
lambda et créez une fonction réelle afin de pouvoir effectuer un fractionnement une fois et décompresser pour convertir uniquement la première partie en entier: l = ['345345:player7',
'435:zo',
'345:name',
'23:hello',
'1231:football']
result = sorted(l, key=lambda x: int(x.split(':',1)[0]))
p >
Essayez ceci: (utile si vous lisez toujours un fichier)
with open('leader.txt', mode = 'r') as f1:
data = f1.readlines()
# end with
keys = {}
output = []
for s in data:
num, value = s.split(sep=':')
if keys.get(int(num), False):
keys[int(num)].append(value)
else:
keys[int(num)] = [value]
for num in sorted(keys):
for i in keys[num]:
output.append((num, i))
for num, value in output:
print(f'{num}: {value}')
Je pense que votre num, value = int (s.split (sep = ':')) générera une erreur
si 2 personnes ont le même numéro, seule la dernière survivra après avoir corrigé l'erreur ValueError en analysant une liste contenant un nombre et une chaîne.
désolé pour les int autour de la liste. n'a pas fait attention haha ... je vais résoudre le problème d'un numéro de deux personnes.
j'ai également besoin d'aide pour ajouter d'autres valeurs sans tout supprimer du fichier externe
Vous devrez ouvrir le fichier en utilisant
'a'qui signifie append.f1 = open ("leader", 'a')Il est préférable que vous puissiez publier des questions séparées au lieu de combiner vos questions en une seule. De cette façon, cela aide les personnes qui répondent à votre question et aussi les autres à chercher au moins une de vos questions. Veuillez consulter Comment demander et La question parfaite . Il n'est pas clair si vous rencontrez des problèmes pour mettre des données dans des structures de données, lire des données à partir d'un fichier, trier des données, insérer des données (les dictionnaires ne sont pas ordonnés ou triés par insertion - pas par des nombres) ou si vous ne pouvez pas enregistrer les données.
Voici ce que vous voulez probablement: Comment créer un meilleur score en python a >