如何在python中对以数字开头的字符串进行排序?

时间:2019-05-15 17:03:47

标签: python python-3.x sorting tkinter

我必须对列表进行排序以显示在下拉列表(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 个答案:

答案 0 :(得分:2)

sortedkey参数一起使用:

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

答案 1 :(得分:0)

考虑使用natsort库。这是一个小型图书馆,几乎可以完成@Lante's answer的建议,但是非常详细。它将字符串的数字部分和非数字部分分开,以自然顺序对它们进行排序(因此得名)。

最简单的方法:

from natsort import natsorted

choices = natsorted(choices)

这不会进行就地排序。为此,您可以生成自己的排序键并将其传递给list.sort

from natsort import natsort_keygen

choices.sort(key=natsort_keygen())

我与natsort没有任何关系,只是一个满意的用户。

答案 2 :(得分:0)

找到了一个超级简单的解决方案。
我在做:

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

此文件可以按任何顺序打印

只需要将{}更改为[]

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

效果很好。这会打印出数组的确切顺序。