Заказ списка с несколькими типами данных из текстового файла - PullRequest
0 голосов
/ 15 октября 2018

Как видно из заголовка, я пытаюсь упорядочить список с несколькими типами данных, например "123 - abc", "20 - xyz" и т. Д. Я попытался отсортировать его обычным способом с помощью .sort () и .sorted () примерно так:

import csv

x = open("leaderboard.txt","r")
reader = csv.reader(x)
allRows = [row for row in reader]
allRows.sort(reverse = True)
print(allRows)

, но это неверно.

Заказывается с номерами в порядке убывания: «123 - xyz», «20 - abc», «10 - xyz», однако заказывается как «20 - abc», «123 - xyz», «10.- xyz "

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

То, что вы видите, это сортировка строк.Например, '100' будет сортироваться до '2'в порядке возрастания ), поскольку каждый символ упорядочен последовательно.Вам необходимо предоставить аргумент key с пользовательской функцией, которая преобразует часть вашей строки в int:

L = ["123 - xyz", "20 - abc", "10 - xyz"]

res = sorted(L, key=lambda x: int(x.split()[0]), reverse=True)

["123 - xyz", "20 - abc", "10 - xyz"]
0 голосов
/ 15 октября 2018

Предполагая, что все строки содержат этот формат, как показано, вы можете sort, используя int из .split(' -') index 0 в качестве ключа

lst = [["20 - abc"], ["123 - xyz"], ["10 - xyz"]]
print(sorted(lst, key=lambda x: int(x[0].split(' -')[0]), reverse=True))
# ['123 - xyz', '20 - abc', '10 - xyz']
0 голосов
/ 15 октября 2018

На основании вашего примера в текстовом файле "123 - abc", "20 - xyz"

Значения "string" и "integer" имеют разные шестнадцатеричные значения, поэтому строка илисимвол "1" (Hex - 223122a) отличается от целого числа 1 (Hex - 31a).Вы сортируете по строковым значениям, и они не будут обрабатывать ваши числа как целые числа, и поэтому вы получаете странный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...