我必须对列表进行排序以显示在下拉列表(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() )
...
有一种简单的方法吗?
答案 0 :(得分:2)
将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
答案 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"]
效果很好。这会打印出数组的确切顺序。