如何在python中对以数字开头的字符串进行排序?
我必须对列表进行排序以显示在下拉列表(tkinter)中,但列表以数字开头如何在python中对以数字开头的字符串进行排序?,python,python-3.x,sorting,tkinter,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
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() )
...
有没有一种简单的方法可以做到这一点?使用带有
键的排序的:
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
将排序
与键
参数一起使用:
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
考虑使用图书馆。这是一个很小的图书馆,做了很多建议,但非常详细。它将字符串的数字部分和非数字部分分开,以便按自然顺序对它们进行排序(因此得名)
最简单的方法是:
from natsort import natsorted
choices = natsorted(choices)
这不是就地排序。为此,您可以生成自己的排序键并将其传递给列表。排序:
from natsort import natsort_keygen
choices.sort(key=natsort_keygen())
我与natsort没有任何关系,只是一个满意的用户。考虑使用该库。这是一个很小的图书馆,做了很多建议,但非常详细。它将字符串的数字部分和非数字部分分开,以便按自然顺序对它们进行排序(因此得名)
最简单的方法是:
from natsort import natsorted
choices = natsorted(choices)
这不是就地排序。为此,您可以生成自己的排序键并将其传递给列表。排序:
from natsort import natsort_keygen
choices.sort(key=natsort_keygen())
我与natsort没有任何关系,只是一个满意的用户。找到了一个超级简单的解决方案。
我在做:
list={"1-a",
"2-b",
"3-c"}
这个可以按任何顺序打印
只需将{}更改为[]
list=["1-a",
"2-b",
"3-c"]
而且效果很好。这将打印阵列的精确顺序。找到了一个超级简单的解决方案。
我在做:
list={"1-a",
"2-b",
"3-c"}
这个可以按任何顺序打印
只需将{}更改为[]
list=["1-a",
"2-b",
"3-c"]
而且效果很好。这将打印数组的确切顺序。第一个示例是集合。你不能直接分类。您能展示一下您的实际数据结构和代码吗?您提到了下拉列表,但示例中没有显示如何填充它们。请将其添加到中。第一个示例是集合
。你不能直接分类。您能展示一下您的实际数据结构和代码吗?您提到了下拉列表,但示例中没有显示如何填充它们。请将其添加到.Errors:File“XXXXXXX.py”第146行中,用于排序中的s(选项,key=lambda x:int(x.split(“-”[0]):文件“XXXXXXX.py”,第146行,用于排序中的s(选项,key=lambda x:int(x.split(“-”[0]):值错误:无效的int()以10为基数:“无”@AJSilva您的选择有问题。检查itOMG,找到解决方案…不需要排序或任何东西,只需使用[]而不是{}{“1-potato”,“2-potato”}
是pythonset
,而[…]
是列表。在继续您的程序之前,请确保熟悉它们,您不会对以下错误感到遗憾:文件“XXXXXXX.py”,第146行,在for s in sorted(选项,key=lambda x:int(x.split(“-”[0]):文件“XXXXXXX.py”,第146行,在for s in sorted(选项,key=lambda x:int(x.split(“-”[0]):value错误:无效的文本for int()以10为基数:“无”@AJSilva您的选择有问题。检查itOMG,找到解决方案…不需要排序或任何东西,只需使用[]而不是{}{“1-potato”,“2-potato”}
是pythonset
,而[…]
是列表。在继续你的课程之前,一定要熟悉它们,你不会后悔的