Как отсортировать строку, начинающуюся с цифр в python? - PullRequest
0 голосов
/ 15 мая 2019

Я должен отсортировать список для отображения в раскрывающемся списке (tkinter), но список начинается с цифр.

tkvar = StringVar(window)
choices = {"1 - Potatos", "2- Tomatos", etc}

Когда я использую sort я получил:

1 - Potatos
10 - Something
11 - Something else
2 - Tomatos

Если я разделю на пару чисел-строк, как:

choices = {(1," - Potatos"), (2,"- Tomatos"), etc}

В раскрывающемся списке это выглядит так:

1{ - Potatos}
2{ - Tomatos}
...

Очевидно, я не хочу печатать {}.

Я хочу, чтобы раскрывающийся список был таким:

1 - Potatos
2 - Tomatos

tkvar.set('1 - Potatos')

popupMenu = OptionMenu(topFrame, tkvar, *choices)

tkvar.trace('w', change_dropdown)

def change_dropdown(*args):
    print( tkvar.get() )
...

Есть ли простой способ сделать это?

Ответы [ 3 ]

2 голосов
/ 15 мая 2019

Используйте sorted с аргументом key:

l = [
    "1 - Potatos",
    "10 - Something",
    "11 - Something else",
    "2 - Tomatos"
]

for s in sorted(l, key=lambda x: int(x.split("-")[0])):
    print(s)

Выход:

1 - Potatos
2 - Tomatos
10 - Something
11 - Something else
0 голосов
/ 16 мая 2019

Нашел супер простое решение.
Я делал:

list={"1-a",
      "2-b",
      "3-c"}

Печать в любом порядке

просто пришлось изменить {} на []

list=["1-a",
      "2-b",
      "3-c"]

И прекрасно работает. это печатает точный порядок массива.

0 голосов
/ 16 мая 2019

Рассмотрите возможность использования библиотеки natsort . Это небольшая библиотека, которая делает в значительной степени то, что предлагает @ Lante , но очень подробно. Он разделяет числовые и нечисловые части строк, чтобы отсортировать их в естественном порядке (отсюда и название).

Самый простой способ:

from natsort import natsorted

choices = natsorted(choices)

Это не делает сортировку на месте. Для этого вы можете сгенерировать свой собственный ключ сортировки и передать его list.sort:

from natsort import natsort_keygen

choices.sort(key=natsort_keygen())

Я никак не связан с natsort, просто довольный пользователь.

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