Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按数值对字典(文本键)排序_Python_Sorting_Dictionary - Fatal编程技术网

Python 按数值对字典(文本键)排序

Python 按数值对字典(文本键)排序,python,sorting,dictionary,Python,Sorting,Dictionary,我需要按数值val对字典进行排序,如下例所示: 123ABC示例1 514我们举个例子2 192DF示例3 因此: 但这在“.”上是分裂的,我没有这个选择——我有什么办法来实现这一点吗 排序结果如下所示: 123ABC示例1 192DF示例3 514我们举个例子2 如果密钥的格式为alwys NNWWWW,其中NNNN为数字,WWW为字母,并且您希望根据NNNNN前缀的数值对项目进行排序,则可以使用: import string sorted(mydict, key=lambda x: int

我需要按数值val对字典进行排序,如下例所示:

123ABC示例1 514我们举个例子2 192DF示例3 因此:

但这在“.”上是分裂的,我没有这个选择——我有什么办法来实现这一点吗

排序结果如下所示:

123ABC示例1 192DF示例3 514我们举个例子2
如果密钥的格式为alwys NNWWWW,其中NNNN为数字,WWW为字母,并且您希望根据NNNNN前缀的数值对项目进行排序,则可以使用:

import string

sorted(mydict, key=lambda x: int(x.lower().rstrip(string.ascii_lowercase)))
其思想是简单地删除包含字母的字符串的右侧部分,然后将剩余的NNNN部分转换为数字

或者,您必须使用正则表达式,如:

import re
num_regex = re.compile(r'\d+')

sorted(mydict, key=lambda x: int(num_regex.match(x).group(0)))

这应该更加稳健。它将对123A12进行与123A相同的排序,而第一个解决方案将产生ValueError。

如果密钥的格式为alwys NNWWW,其中NNNN为数字,WWW为字母,并且您希望根据NNNNN前缀的数值对项目进行排序,则可以使用:

import string

sorted(mydict, key=lambda x: int(x.lower().rstrip(string.ascii_lowercase)))
其思想是简单地删除包含字母的字符串的右侧部分,然后将剩余的NNNN部分转换为数字

或者,您必须使用正则表达式,如:

import re
num_regex = re.compile(r'\d+')

sorted(mydict, key=lambda x: int(num_regex.match(x).group(0)))
这应该更加稳健。它将对123A12进行与123A相同的排序,而第一个解决方案将产生ValueError。

您可以使用a获取字符串开头的数字部分,并使用它进行排序。但是,请注意,这不会执行任何错误检查:如果密钥不是以数字开头,则会引发异常

>>> mydict = {"123ABC": "Example 1",
...           "514WE":  "Example2",
...           "192DF":  "Example 3"}
...     
>>> [re.match(r"\d+", s).group() for s in mydict]
['192', '123', '514']
>>> sorted(mydict, key=lambda s: int(re.match(r"\d+", s).group()))
['123ABC', '192DF', '514WE']
您可以使用获取字符串开头的数字部分,并使用该部分进行排序。但是,请注意,这不会执行任何错误检查:如果密钥不是以数字开头,则会引发异常

>>> mydict = {"123ABC": "Example 1",
...           "514WE":  "Example2",
...           "192DF":  "Example 3"}
...     
>>> [re.match(r"\d+", s).group() for s in mydict]
['192', '123', '514']
>>> sorted(mydict, key=lambda s: int(re.match(r"\d+", s).group()))
['123ABC', '192DF', '514WE']

一个选择是使用一个。它的工作原理与普通python字典相同,但它保持插入到字典中的对象的顺序。因此,您不需要任何排序,只需按照您需要的顺序更新OrderedICT即可。

一个选项是使用。它的工作原理与普通python字典相同,但它保持插入到字典中的对象的顺序。因此,您不需要任何排序,只需按照您需要的顺序更新OrderedDict。

我不明白您的字典是什么样子的:您提供输入,但不提供输出。你希望排序后的版本是什么样子?我有一个问题-巴库留和托比亚斯·k并列-我接受哪个答案?我想它们实际上相隔几秒钟……我不明白你的字典是什么样子:你输入,但你不输出。你希望排序后的版本是什么样子?我有一个问题-巴库留和托比亚斯·k并列-我接受哪个答案?我想他们之间的距离是几秒钟。。。