Добавление информации в столбцы с довольно стабильным - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу создать систему подсчета очков, и для этого я использую довольно стабильную систему. Я добавляю все результаты в таблицу, а затем упорядочиваю их по их количеству. Это работает отлично, за исключением случаев, когда я включаю их позицию (1, 2, 3, 4 и т. Д. 1011 *). Если их позиция включена до изменения, она меняется, так что число 1 больше не находится сверху, а 4 больше нет внизу они перемешаны.

Другой метод, который я пробовал, - это добавление позиций после сортировки по счету, но это добавляет столбец справа от таблицы, и я стремлюсь получить его справа. Если кто-нибудь может дать мне знать, как

а) перезаписать заданные c столбцы,
б) прекратить сортировку, затрагивающую определенные столбцы, или
c) добавить новые столбцы слева от таблица,

это было бы очень ценно.

from prettytable import PrettyTable

x = PrettyTable()
x.field_names = ["Position", "User", "Score"]


x.add_row([1, "Sam", 42])
x.add_row([2, "Ben", 43])
x.add_row([3, "Alex", 37])
x.add_row([4, "Joe", 54])

x.reversesort = True
y = x.sortby="Score"


print(x.get_string(start=0,end=4))

1 Ответ

0 голосов
/ 10 февраля 2020

Было бы лучше отделить печать от вашей оценки.

from prettytable import PrettyTable

# A dictionary mapping the user names to scores.

scores = {
    "Sam": 42,
    "Ben": 43,
    "Alex": 37,
    "Joe": 54,
}

# sorted() returns a sorted list from an iterable.
# Since `scores` is now a dict, we need to use `.items()`
# to get pairs out of it.
# The key function accesses the pair's value – the score.
# `reverse=True` is set for obvious reasons.

sorted_user_to_score = sorted(
    scores.items(),
    key=lambda pair: pair[1],
    reverse=True,
)

pt = PrettyTable()
pt.field_names = ["Position", "User", "Score"]

# enumerate() yields pairs of (position, datum) from an iterable.
# It accepts an optional start index parameter – we want positions
# to start from 1, not 0.

for position, (user, score) in enumerate(sorted_user_to_score, 1):
    pt.add_row([position, user, score])

print(pt.get_string(start=0, end=4))

...